Keeping a strange time format, and adding values to it in python
所以我一直在尝试在python中为我的REST调用添加一个时间格式,但似乎总是有一些问题,首先是时间格式要求,必须是精确的,否则很不幸它不会工作。
在请求参数中使用以下符合ISO-8601的日期/时间格式。
年-月-日-日'hh:mm:ss.sssxx
例如,2014年5月26日下午21:49:46的格式如下:
PDT中的L:2014-05-26t21:49:46.000-07:00
l表示UTC:2014-05-26t21:49:46.000z
代码说明
- YYYY四位数年份
- mm两位数月份(01=1月等)
- 月日两位数(01到31)
- 日期/时间的T分隔符
- hh小时的两位数(00到23)(不允许AM/PM)
- mm分钟的两位数(00到59)
- ss秒的两位数(00到59)
- sss秒的三位数毫秒
- XXX ISO 8601时区(Z或+hh:mm或-hh:mm)
所以,我以前尝试过的是:
1 2 3 4 5 6 7 | def format_time(self, isnow): currentdt = datetime.datetime.utcnow() if not isnow: currentdt += datetime.timedelta(0,3) (dt, micro) = currentdt.strftime('%Y-%m-%dT%H:%M:%S.%f').split('.') dt ="%s.%03dZ" % (dt, int(micro) / 1000) return dt |
现在,这可能以正确的格式返回它,但时区仍然存在问题。
我试图完成的最终结果是,当我执行此操作时,它会找到当前时间(阿姆斯特丹时区/gmt/utc+1),并以此格式创建时间。和else语句,以获得相同的时间,但附加x秒。
有人能帮我吗?
好的,微秒的格式是毫秒,很好。
现在您的挑战是处理时区偏移;它不能只是z。
为了让事情变得更困难,strftime的
所以你需要解决这个问题。有一种方法可以做到:
Python 3:
1 2 3 4 5 6 7 8 9 10 | def format_time(self, isnow): currentdt = datetime.datetime.now(datetime.timezone.utc) if not isnow: currentdt += datetime.timedelta(0,3) (dt, micro) = currentdt.strftime('%Y-%m-%dT%H:%M:%S.%f').split('.') tz_offset = currentdt.astimezone().strftime('%z') tz_offset ="Z" if tz_offset =="" else tz_offset[:3] +":" + tz_offset[3:] dt ="%s.%03d%s" % (dt, int(micro) / 1000, tz_offset) return dt |
Python 2:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import pytz from dateutil.tz import * def format_time(self, isnow): currentdt = datetime.datetime.now(pytz.utc) if not isnow: currentdt += datetime.timedelta(0,3) (dt, micro) = currentdt.strftime('%Y-%m-%dT%H:%M:%S.%f').split('.') tz_offset = currentdt.astimezone(tzlocal()).strftime('%z') tz_offset ="Z" if tz_offset =="" else tz_offset[:3] +":" + tz_offset[3:] dt ="%s.%03d%s" % (dt, int(micro) / 1000, tz_offset) return dt |
评论回复:我需要做一些改变。找到当前时区是非常重要的。我能找到的最简单的方法是从https://stackoverflow.com/a/25887393/1404311,我已经将这些概念集成到上面的代码中。
基本上,您应该使用