【问题标题】:Convert UTC String to UTC Date [Android - Java] [duplicate]将 UTC 字符串转换为 UTC 日期 [Android - Java] [重复]
【发布时间】:2020-09-13 09:01:55
【问题描述】:

我想将 UTC 时间转换为日期。它应该返回日期为

预期结果是:2020-09-01T08:44:25.654Z

输出是 -> "Tue Sep 01 14:14:25 GMT+05:30 2020".

我收到UTC,但它在String 我想要在Date datatype 中相同的format

我希望它为Date 与上述UTC 格式。

有人知道怎么弄吗?

public static Date convertToUtcTime(Date date) throws ParseException {
     SimpleDateFormat sdf = new SimpleDateFormat(DateFormats.yyyyMMddThhmmssZ);  //"yyyy-MM-dd'T'HH:mm:ss.SSSXXX"
     sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

     return sdf.parse(sdf.format(date));
}

我也不想使用 toInstant 方法

[更新]

Date strFromDate;
try {
     strFromDate = AppUtils.convertToUtcTime(myCalendar.getTime());
} catch (ParseException e) {
     e.printStackTrace();
}

然后将 strFromDate 传递给 api 请求 我没有从 strFromDate 得到预期的结果

【问题讨论】:

  • @UmairMubeen 我希望结果为 UTC 格式,但为日期数据类型。我想在 api 请求中将 2020-09-01T08:44:25.654Z 作为 Date 发送,但它是“Tue Sep 01 14:14:25 GMT+05:30 2020”
  • 发布您的输入和您想要的输出
  • 输入日期 - Tue Sep 01 14:14:25 GMT+05:30 2020 输出日期 - 2020-09-01T08:44:25.654Z @UmairMubeen
  • 您正在使用 System.out.println 或在 ide 中查看返回对象的日期,此视图向您显示日期的 toString 版本,如果您需要显示格式化日期,则应返回 String from您的方法,已根据您的需要进行了格式化。

标签: java android date utc


【解决方案1】:

你最喜欢的演员是谁?假设它是Amitabh Bachchan。无论他扮演什么角色,他仍然是他自己(这就是为什么导演/制片人会向他提出下一个提议?)。他的表演根据角色装饰了他的外表。导演利用他的演技得到的,是一个按照指定角色代表他的装饰角色。然后你说 Amitabh Bachchan 是 angry young man 或 Amitabh Bachchan 是 coolie 等等)

同样,无论你问java.util.Date 采取什么样的态度(使用SimpleDateFormat),它总是代表不。从1970-01-01T00:00:00Z 的纪元开始的毫秒数。它没有任何时区或时区偏移信息。从这个毫秒开始,Java 根据你的 JVM 的时区计算日期和时间,然后将获得的日期和时间与你的 JVM 的时区结合起来,最后在调用其toString() 方法时返回字符串。我相信您已经知道,当您使用System.out.println 打印一个对象时,该对象的toString() 方法返回的字符串会被打印出来。检查this 以获取有关toString() 实现java.util.Date 的更多详细信息。 SimpeDateFormat 会根据模式更改 java.util.Date 的外观。使用SimpeDateFormat 得到的是一个装饰字符串,它按照指定的模式表示Date 对象。然后,你说Date 作为EEE MMMM dd, yyyy HH:mm 模式的字符串或Date 作为yyyy-MM-dd HH:mm:ss 模式的字符串等等。

总结是:你不能通过指定不同的模式来改变Date对象。如果您打印它,您将始终得到其toString() 函数返回的字符串。如果你想要一个不同的字符串,你可以使用SimpleDateFormat

推荐:

我建议您从过时且容易出错的 java.util 日期时间 API 和 SimpleDateFormat 切换到 modern java.time 日期时间 API 和相应的格式化 API(包,java.time.format)。从 Trail: Date Time 了解有关现代日期时间 API 的更多信息。

如果您的 Android API 级别仍然不符合 Java8,请检查 How to use ThreeTenABP in Android ProjectJava 8+ APIs available through desugaring

【讨论】:

  • 不,这条线呢:I am not getting expected result from strFromDate .....我在看到这个问题后一直在尝试这样做,但他的代码不起作用它不会改变时区日期对象。他写了那句话是因为他的英语不好(像我一样)。试试看!
  • @Omid.N - OP 的代码编译成功。请尝试String strDate = "2020-09-01T08:44:25.654Z"; SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); Date date = sdf.parse(strDate); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(sdf.parse(sdf.format(date)));
猜你喜欢
  • 2021-04-19
  • 2012-07-02
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 2020-03-21
  • 1970-01-01
相关资源
最近更新 更多