如何在几秒钟内从datetime转换为时间戳?

时间:2018-03-15 21:15:34

标签: java python timestamp timestamp-with-timezone

美好的一天。这样的问题 - python中有一个方法可以获取datetime并将其转换为时间戳:

source = 'Friday 9:14 PM March 9 2018'
central_tz = pytz.timezone('Canada/Eastern')
utc_tz = pytz.timezone('UTC')

naive_dt = datetime.datetime.strptime(source, "%A %I:%M %p %B %d %Y")
utc_ts = time.mktime(utc_dt.timetuple())
print(central_tz.localize(native_dt, is_dst=None))
print("naite_dt")
print(naive_dt)
central_dt = central_tz.localize(naive_dt, is_dst=None)
print("central_dt")
print(central_dt)
utc_dt = central_dt.astimezone(pytz.utc)
print("utc_dt")
print(utc_dt)
utc_ts = time.mktime(utc_dt.timetuple())
print("utc_ts")
print(utc_ts)

输出:

naite_dt
2018-03-09 21:14:00
central_dt
2018-03-09 21:14:00-05:00
utc_dt
2018-03-10 02:14:00+00:00
utc_ts
1520640840.0

我在java中实现了相同的方法:

public static void scraper() throws ParseException {
        String source = "2018 марта 9, 09:14 PM";
        String pattern = "yyyy MMMM dd, KK:mm a";
        String central_tz = "Canada/Eastern";
        String utc_tz = "UTC";

        DateFormat dt = new SimpleDateFormat(pattern);
        dt.setTimeZone(TimeZone.getTimeZone(central_tz));

        Date date = dt.parse(source);
        String formatted = dt.format(date);
        System.out.println("Время по Канаде: " + formatted);

        dt.setTimeZone(TimeZone.getTimeZone(utc_tz));
        formatted = dt.format(date);
        System.out.println("Время по UTC: " + formatted);

        Timestamp timestmp = Timestamp.from(date.toInstant());
        System.out.println("Время Timestamp: " + timestmp.toString());
        System.out.println("Время в секундах Timestamp: " + timestmp.getTime() / 1000);
    }

但它的输出和它的真实输出:

Время по Канаде: 2018 марта 09, 09:14 PM
Время по UTC: 2018 марта 10, 02:14 AM
Время Timestamp: 2018-03-10 04:14:00.0
Время в секундах Timestamp: 1520648040

最后,我们在Python 1520640840中输出时间戳,在Java 1520648040中输出时间戳 - 它有所不同!为什么?我可以用Python修复它吗?感谢' S

1 个答案:

答案 0 :(得分:0)

如果你注意到python中显示的时间是 2018-03-10 02:14:00 + 00:00 你用它来转换成时间戳,而在你使用日期时用Java变量,其时间 2018-03-10 04:14:00.0。

两者之间有2小时的差异。试着找出发生这种情况的原因。我认为你在timezon UTC + 2因此日期变量存储的时间是4:14 am,你没有设置时区,而在python中你的date变量" {{1} }"用于转换时间戳的时区为UTC时区,因此它的时间是凌晨2:14。

您可以通过计算两个时间戳之间的差异来验证这一点,即7200表示2小时。所以实际上你的Java时间戳是根据你的本地时区设置的,python时间戳是根据UTC时区设置的。