将 JSON 纪元时间转换为当地人类可读的日期
Converting JSON epoch time to local human readable date
我正在尝试获取在 Zapier 中提供给我的一些 Stripe 数据,并将两个纪元时间转换为人类可读的日期,以便可以轻松读取订阅期。直到几天前,下面的确切代码之前都可以正常工作,现在我收到以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.7/json/__init__.py", line 251, in dumps
sort_keys=sort_keys, **kw).encode(obj)
File "/usr/lib64/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib64/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/var/runtime/awslambda/bootstrap.py", line 110, in decimal_serializer
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=22, tm_hour=14, tm_min=9, tm_sec=58, tm_wday=0, tm_yday=295, tm_isdst=0) is not JSON serializable
这是以前的工作代码:
import ast
import json
import time
data = "amount: 1000
currency: usd
description: None
discountable: True
id: sub_DfoojqxyubarmQ
livemode: True
metadata: {}
object: line_item
period: {u'start': 1540217398, u'end': 1542895798}
plan: {u'active': True, u'product': u'prod_fooj56ZAbarmaU',
u'transform_usage': None, u'name': u'Subscription - Monthly',
u'aggregate_usage': None, u'created': 1532982748, u'tiers_mode': None,
u'interval': u'month', u'tiers': None, u'object': u'plan', u'id':
u'plan_DKMmOfooQEbars', u'currency': u'usd', u'amount': 1000,
u'interval_count': 1, u'trial_period_days': None, u'livemode': True,
u'usage_type': u'licensed', u'metadata': {u'qb_sub_product': u'8'},
u'nickname': u'Subscription - Monthly', u'statement_descriptor':
u’SUBSCRIPTION’, u'billing_scheme': u'per_unit'}
proration: False
quantity: 1
subscription: None
subscription_item: si_DpfooWbarKUVIh
type: subscription"
#retrieve period data
period_begin = data.find('period:') + 8
period_end = data.find('plan:')
#convert period to JSON
period = ast.literal_eval(data[period_begin:period_end])
json_period = json.dumps(period)
json_period = json.loads(json_period)
#retrieve plan data
plan_begin = data.find('plan:') + 6
plan_end = data.rfind('}') + 1
#convert plan to JSON
plan = ast.literal_eval(data[plan_begin:plan_end])
json_plan = json.dumps(plan)
json_plan = json.loads(json_plan)
#period_start and period_end to human readable format
period_start = time.strftime("%-m/%-d/%Y"), time.localtime(json_period['start'])
period_end = time.strftime("%-m/%-d/%Y", time.localtime(json_period['end']))
output = [{'json_plan': json_plan, 'json_period': json_period, 'period_start': period_start, 'period_end': period_end}]
你打错了。括号 time.strftime("%-m/%-d/%Y")
过早结束。您的代码所做的是生成一个 2 值元组:格式 now()
为默认的 strftime 格式,以及一个 time.localtime
来自纪元。
#period_start and period_end to human readable format
period_start = time.strftime("%-m/%-d/%Y", time.localtime(json_period['start']))
period_end = time.strftime("%-m/%-d/%Y", time.localtime(json_period['end']))
我正在尝试获取在 Zapier 中提供给我的一些 Stripe 数据,并将两个纪元时间转换为人类可读的日期,以便可以轻松读取订阅期。直到几天前,下面的确切代码之前都可以正常工作,现在我收到以下错误:
Traceback (most recent call last):
File "/usr/lib64/python2.7/json/__init__.py", line 251, in dumps
sort_keys=sort_keys, **kw).encode(obj)
File "/usr/lib64/python2.7/json/encoder.py", line 207, in encode
chunks = self.iterencode(o, _one_shot=True)
File "/usr/lib64/python2.7/json/encoder.py", line 270, in iterencode
return _iterencode(o, 0)
File "/var/runtime/awslambda/bootstrap.py", line 110, in decimal_serializer
raise TypeError(repr(o) + " is not JSON serializable")
TypeError: time.struct_time(tm_year=2018, tm_mon=10, tm_mday=22, tm_hour=14, tm_min=9, tm_sec=58, tm_wday=0, tm_yday=295, tm_isdst=0) is not JSON serializable
这是以前的工作代码:
import ast
import json
import time
data = "amount: 1000
currency: usd
description: None
discountable: True
id: sub_DfoojqxyubarmQ
livemode: True
metadata: {}
object: line_item
period: {u'start': 1540217398, u'end': 1542895798}
plan: {u'active': True, u'product': u'prod_fooj56ZAbarmaU',
u'transform_usage': None, u'name': u'Subscription - Monthly',
u'aggregate_usage': None, u'created': 1532982748, u'tiers_mode': None,
u'interval': u'month', u'tiers': None, u'object': u'plan', u'id':
u'plan_DKMmOfooQEbars', u'currency': u'usd', u'amount': 1000,
u'interval_count': 1, u'trial_period_days': None, u'livemode': True,
u'usage_type': u'licensed', u'metadata': {u'qb_sub_product': u'8'},
u'nickname': u'Subscription - Monthly', u'statement_descriptor':
u’SUBSCRIPTION’, u'billing_scheme': u'per_unit'}
proration: False
quantity: 1
subscription: None
subscription_item: si_DpfooWbarKUVIh
type: subscription"
#retrieve period data
period_begin = data.find('period:') + 8
period_end = data.find('plan:')
#convert period to JSON
period = ast.literal_eval(data[period_begin:period_end])
json_period = json.dumps(period)
json_period = json.loads(json_period)
#retrieve plan data
plan_begin = data.find('plan:') + 6
plan_end = data.rfind('}') + 1
#convert plan to JSON
plan = ast.literal_eval(data[plan_begin:plan_end])
json_plan = json.dumps(plan)
json_plan = json.loads(json_plan)
#period_start and period_end to human readable format
period_start = time.strftime("%-m/%-d/%Y"), time.localtime(json_period['start'])
period_end = time.strftime("%-m/%-d/%Y", time.localtime(json_period['end']))
output = [{'json_plan': json_plan, 'json_period': json_period, 'period_start': period_start, 'period_end': period_end}]
你打错了。括号 time.strftime("%-m/%-d/%Y")
过早结束。您的代码所做的是生成一个 2 值元组:格式 now()
为默认的 strftime 格式,以及一个 time.localtime
来自纪元。
#period_start and period_end to human readable format
period_start = time.strftime("%-m/%-d/%Y", time.localtime(json_period['start']))
period_end = time.strftime("%-m/%-d/%Y", time.localtime(json_period['end']))