我在Java中使用yyyyMMdd:HH:mm:ss:SSS
SimpleDateFormat sDateFormat = new SimpleDateFormat("yyyyMMdd:HH:mm:ss:SSS");
String endDate = sDateFormat.format(new Date()).toString();
log("[" + endDate + "]" + " worker Thread ends);
这给了我当地时间
[20151028:19:38:33:920] worker Thread ends
作为日志的一部分,我还有unix时间戳
{"endTime":1446075513000}
时间戳和日期字符串完美匹配。 但是,在某些日志中,我错过了JSON行。所以我不得不从日期字符串重建时间戳。
dt = datetime.datetime.strptime('20151028:19:38:33:920', "%Y%m%d:%H:%M:%S:%f")`
epoch = datetime.datetime.fromtimestamp(0)
timestamp = (dt - epoch).total_seconds() # 1446079113.92
现在,如果我test_dt = datetime.datetime.fromtimestamp(timestamp)
,我会datetime.datetime(2015, 10, 28, 20, 38, 33, 920000)
我假设这是因为python认为我的dt
是UTC的时间;这不是真的。虽然假设正好1小时休息,我认为更有可能是因为夏令时。
我也尝试过:
tz = pytz.timezone('US/Eastern')
dt = datetime.datetime.strptime('20151028:19:38:33:920', "%Y%m%d:%H:%M:%S:%f").replace(tzinfo=tz)
timestamp = dt.strftime("%s") # '1446079113'
这产生与早期方法相同的结果。我想这是因为python datetime文档说你可以替换tzinfo但它不会重新计算时间。
如何在考虑夏令时的同时让python将本地时间转换为时间戳?