gpt4 book ai didi

c# - Java 格式 Date to UTC 有时会产生 '????-??-??T??:??:??.???Z'

转载 作者:行者123 更新时间:2023-11-29 18:52:16 30 4
gpt4 key购买 nike

在我们的 Android 应用程序中,我们有一个将日期格式化为 UTC 的 util 方法:

 static String formatToUTC(Date date) {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
dateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
return dateFormat.format(date).replace(" ", "T") + "Z";
}

什么有时会产生值(value):

????-??-??T??:??:??.???Z

要解决这个问题,我们应该先重现它,但我们无法重现该行为。我们尝试了不同的语言环境,并从 Long.Max_VALUE、Long.MIN_VALUE 传递了一个无效的新 Date()。

问题是:出现此问题的原因可能是什么?

提前致谢!

已编辑:

Android 应用以两种方式生成日期:

  1. new Date();
  2. 新日期(longValue)

日期来自全局。

编辑 2:

问题出现在服务器端(写在 c# 上)。

我们使用 the Ksoap2 for Android与服务器交互,它有时会尝试将 ????-??-??T??:??:??.????Z 转换为 DateTime 对象时失败。但主要时间一切都很好。

最佳答案

tl;dr

Instant.now().
.truncatedTo( ChronoUnit.MILLISECONDS ) ;
.toString()

2018-01-23T01:23:45.123Z

线程安全问题?

这是我从未听说过的奇怪行为。我的第一个猜测是线程问题。遗留的日期时间类不是线程安全的。它们的替代品 java.time 类完全是线程安全的。

java.time

您可以替换那些麻烦的旧遗留类。多年前,它们在 Java 中被现代 java.time 类所取代。对于 Android,请参阅下面的项目符号。

即时

java.util.Date 类被替换为 java.time.InstantInstant class 代表时间轴上的一个时刻 UTC分辨率为 nanoseconds (最多九 (9) 位小数)。

Instant instant = Instant.now() ;  // Capture the current moment in UTC.

如果您只需要毫秒,您可以截断 Instant 中可能存在的任何微秒或纳秒。

Instant instantTruncated = instant.truncatedTo( ChronoUnit.MILLISECONDS ) ;

ISO 8601

您想要的输出格式由 ISO 8601 定义标准。

java.time 类在解析/生成字符串时默认使用这些标准格式。因此无需指定格式模式。

String output = instant.toString();

2018-01-23T01:23:45.123Z


关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在在maintenance mode , 建议迁移到 java.time类。

要了解更多信息,请参阅 Oracle Tutorial .并在 Stack Overflow 中搜索许多示例和解释。规范为 JSR 310 .

您可以直接与您的数据库交换java.time 对象。使用JDBC driver符合 JDBC 4.2或以后。不需要字符串,不需要 java.sql.* 类。

从哪里获得 java.time 类?

ThreeTen-Extra项目用附加类扩展 java.time。该项目是 future 可能添加到 java.time 的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter , 和 more .

关于c# - Java 格式 Date to UTC 有时会产生 '????-??-??T??:??:??.???Z',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50706416/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com