我收到以下服务时间
'Nov 11 2019 7:30 PM'
我知道这是美国中部时间,我需要获取当前时间与此事件时间之间的小时数,但我无法理解如何将此日期转换为 UTC。
我正在使用以下方法,但这似乎效果不佳。
public Date ticketJSONDateFormatter(String dateTime){
SimpleDateFormat simpleDateFormatter
= new SimpleDateFormat("MMM d yyyy HH:mm a");
Date parsedDate = null;
try {
simpleDateFormatter.setTimeZone(TimeZone.getTimeZone("UTC"));
parsedDate = simpleDateFormatter.parse(dateTime);
} catch (ParseException e) {
e.printStackTrace();
}
return parsedDate;
}
此方法返回以下日期
Fri Oct 11 12:30:00 GMT+05:00 2019
虽然预期的输出可能是这样的。我的设备位于 (+5:00 UTC)
Fri Oct 12 12:30:00 GMT+05:00 2019
最佳答案
您可以使用“LocalDateTime”来解析迄今为止的字符串,
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM dd yyyy hh:mm a");
String date = "Nov 11 2019 07:30 PM";
LocalDateTime ldt = LocalDateTime.parse(date, formatter);
然后将其转换为您首选的区域,
Instant cdt = ldt.atZone(ZoneId.of("America/Chicago")).toInstant();
return cdt.atOffset(ZoneOffset.UTC)
这将返回一个Instant
。
正如 Ole V.V 在评论中建议的那样,我不建议使用旧的 Date
和 Calendar
API。我建议阅读此answer了解与旧 Date
API 相关的问题。
关于java - 如何将时间转换为 UTC,然后转换为设备本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327330/