【发布时间】:2019-03-20 00:50:57
【问题描述】:
我正在尝试采用“HH:mm”格式的字符串并将其从本地转换为 utc,反之亦然。到目前为止,这是我所拥有的:
private String doTimeConversion(String time, boolean type) {
DateFormat dfLocal = new SimpleDateFormat("HH:mm");
DateFormat dfUTC = new SimpleDateFormat("HH:mm");
TimeZone local = TimeZone.getDefault();
TimeZone utc = TimeZone.getTimeZone("UTC");
dfLocal.setTimeZone(local);
dfUTC.setTimeZone(utc);
Date date;
String newTime = "00:00";
try {
//If true: local to utc/If false: utc to local
if (type) {
date = dfLocal.parse(time);
newTime = dfUTC.format(date);
} else {
date = dfUTC.parse(time);
newTime = dfLocal.format(date);
}
} catch (ParseException e) {
e.printStackTrace();
}
return newTime;
}
这似乎主要工作,但我遇到的问题是,虽然我应该使用 TimeZone.getDefault() 来获取设备时间,但它没有考虑夏令时。不是将 12:00(UTC) 更改为 08:00(EDT),而是将其更改为 07:00(EST)。
总的来说,我只是希望能够花费用户输入的时间(字符串)并使用设备时区来假设用户输入的内容是根据他们的时区并将其转换为 utc 以及从UTC 回到设备时区。
【问题讨论】:
-
那么我们应该假设今天的日期还是哪个日期?为了知道我们是否在夏令时(DST)。 (
SimpleDateFormat假设为 1970 年 1 月 1 日。) -
仅供参考,
java.util.Date、java.util.Calendar和java.text.SimpleDateFormat等麻烦的旧日期时间类现在已被 java.time 类所取代。大多数 java.time 功能在 ThreeTen-Backport 项目中被反向移植到 Java 6 和 Java 7。在ThreeTenABP 项目中进一步适用于早期的Android。见How to use ThreeTenABP…。
标签: java android datetime timezone