如何在Json中发送java.util.Date?

Gre*_*ack 8 java string json date http

我需要在json中发送数据.重要的是我希望保留语言环境,以便接收者在当地时间获取日期.我怎样才能做到这一点?

我不能简单地使用,Date.toString()因为如果他们的语言环境不同(不同的日期和月份名称等等),我将无法在接收端解析它.

这个问题有方法解决吗?

Joo*_*gen 6

自1970年以来的很长一段时间都很好,但不是人类可读的,因此是用于测试/开发的PITA.

因此,使用ISO 8601标准日期时间 "yyyy-MM-dd'T'HH:mm:ss"(其中'T'只是一个文字T(通常在这里看到一个空格;和小数秒.SSS).

也是可能的,但希望不需要(=在本地化时间内合并).

在java 8之前使用SimpleDateFormat.


Bas*_*que 5

太长了;博士

\n\n
Instant.now()\n       .toString()\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

2017-01-23T12:34:56.123456789Z

\n
\n\n

世界标准时间

\n\n

通常最好将数据交换为 UTC (GMT) 格式的日期时间值。让接收器调整到所需的时区。

\n\n

Instant

\n\n

该类Instant表示 UTC 时间线上的一个时刻,分辨率为纳秒。

\n\n
Instant instant = Instant.now() ;\nString output = instant.toString() ;  // Generate a String in standard ISO 8601 format.\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n

2017-01-23T12:34:56.123456789Z

\n
\n\n

您可以轻松解析该字符串。

\n\n
Instant instant = Instant.parse( "2017-01-23T12:34:56.123456789Z" ) ; \n
Run Code Online (Sandbox Code Playgroud)\n\n

ISO 8601

\n\n

ISO 8601标准为日期时间值的文本表示定义了清晰、易读、易解析的格式。这些格式非常适合数据交换。

\n\n

对于 UTC 来说,这意味着上面示例中看到的格式。将T日期部分与一天中的时间部分分开。末尾Z的 是ZuluUTC 的缩写。

\n\n

语言环境

\n\n

该问题提到了语言环境,好像与时区相关。A与时区无关Locale。A指定 (a) 用于翻译日名、月名等的人类语言,以及 (b) 决定缩写、大写、标点符号等问题的文化规范。Locale

\n\n

时区是区域\xe2\x80\x99s与 UTC 的偏移量的更改历史记录,跟踪导致这些更改的异常,例如夏令时 (DST)

\n\n

搜索 Stack Overflow 以了解更多信息。这已经被报道了数百次了。搜索诸如ZoneIdZoneOffsetZonedDateTimeInstantOffsetDateTime和 之类的类DateTimeFormatter。阅读有关 java.time 类的Oracle 教程。

\n\n
ZonedDateTime zdt = instant.atZone( ZoneId.of( "Pacific/Auckland" ) ) ;\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

关于java.time

\n\n

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

\n\n

Joda -Time项目现在处于维护模式,建议迁移到java.time类。

\n\n

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

\n\n

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 驱动程序。不需要字符串,不需要java.sql.*类。

\n\n

从哪里获取 java.time 类?

\n\n\n\n

ThreeTen -Extra项目通过附加类扩展了 java.time。该项目是 java.time 未来可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如Interval、、YearWeekYearQuarter

\n


Lau*_* L. 3

使用 java.util.Date 的 getTime 方法获取时间戳。将其转换回日期后,每个接收器都可以使用其本地时区显示它。

记住那个日期

表示时间上的特定瞬间,精度为毫秒。

toString 方法只是以特定方式格式化它:

dow mon dd hh:mm:ss zzz yyyy
Run Code Online (Sandbox Code Playgroud)

选择发送时间戳意味着您还使用更少的带宽。