将localtime转换为unix时间戳

时间:2015-12-07 06:24:58

标签: python datetime

我在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将本地时间转换为时间戳?

0 个答案:

没有答案