美好的一天。这样的问题 - 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
答案 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时区设置的。