java - 如何将时间转换为 UTC,然后转换为设备本地时间

标签 java android date

我收到以下服务时间

'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 在评论中建议的那样,我不建议使用旧的 DateCalendar API。我建议阅读此answer了解与旧 Date API 相关的问题。

关于java - 如何将时间转换为 UTC,然后转换为设备本地时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58327330/

相关文章:

java - 解析 Android 中的嵌套 XML 节点

java - JDatePicker Java中的日期差异

java - 在分隔符上拆分数组,但保留分隔符的一部分

java - 如何在不移动放大镜的情况下仅对齐 SearchView 的提示文本?

java - 用于读取的 JPA 锁定实体

java - 在 Android 应用程序中使用受 Java 启发的语言

java - 显示 jTable 中两个给定日期之间的元素

java - 简单日期格式是否支持这种转换?

java - 无法从 fileDownloadActionListener 中的 ADF 组件获取值

java - 如何避免大的 if 语句和 instanceof