Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 日期的奇怪字符串格式_Java_Date_Datetime_Timezone_Timezone Offset - Fatal编程技术网

Java 日期的奇怪字符串格式

Java 日期的奇怪字符串格式,java,date,datetime,timezone,timezone-offset,Java,Date,Datetime,Timezone,Timezone Offset,Java应用程序获取JSON消息流, 其中,表示某个日期的字符串字段的格式为“2019-01-01+01:00” 这看起来像是一个正常的日期,然后是时区偏移,我的这个猜测已经得到了制作人的证实 问题: 尽管我仍然没有真正理解它背后的逻辑,但我必须在Java应用程序中解析它。 最简单的方法是在“+”字符上拆分该字符串,然后用LocalDate中的某种模式解析日期部分 但是出于好奇,也许Java中有一些日期格式我不知道,它可以允许这种奇怪的字符串格式?是的,有。我同意这很奇怪,我不知道你们应该怎么使

Java应用程序获取JSON消息流, 其中,表示某个日期的字符串字段的格式为“2019-01-01+01:00”

这看起来像是一个正常的日期,然后是时区偏移,我的这个猜测已经得到了制作人的证实

问题: 尽管我仍然没有真正理解它背后的逻辑,但我必须在Java应用程序中解析它。 最简单的方法是在“+”字符上拆分该字符串,然后用LocalDate中的某种模式解析日期部分

但是出于好奇,也许Java中有一些日期格式我不知道,它可以允许这种奇怪的字符串格式?

是的,有。我同意这很奇怪,我不知道你们应该怎么使用偏移量。但您可以使用格式化程序将其解析为
LocalDate

    String stringFromJson = "2019-01-01+01:00";
    LocalDate date = LocalDate.parse(stringFromJson, DateTimeFormatter.ISO_OFFSET_DATE);
    System.out.println(date);
输出:

2019-01-01

+
(加号)处拆分并不总是有效。
带有偏移量的日期也可能带有负偏移量,例如
-04:00
,以及带有偏移量
Z
(表示零,即UTC)。当然,您可以编写代码来手动处理这些情况,但最好使用内置的格式化程序

不要使用
Date
SimpleDateFormat
这些类的设计很差,而且很早就过时了,后者尤其麻烦。使用
LocalDate
DateTimeFormatter
,两者都来自。

是的。我同意这很奇怪,我不知道你们应该怎么使用偏移量。但您可以使用格式化程序将其解析为
LocalDate

    String stringFromJson = "2019-01-01+01:00";
    LocalDate date = LocalDate.parse(stringFromJson, DateTimeFormatter.ISO_OFFSET_DATE);
    System.out.println(date);
输出:

2019-01-01

+
(加号)处拆分并不总是有效。
带有偏移量的日期也可能带有负偏移量,例如
-04:00
,以及带有偏移量
Z
(表示零,即UTC)。当然,您可以编写代码来手动处理这些情况,但最好使用内置的格式化程序


不要使用
Date
SimpleDateFormat
这些类的设计很差,而且很早就过时了,后者尤其麻烦。使用
LocalDate
DateTimeFormatter
,两者都来自。

Ok,现在,我按如下方式解析它:
java.util.dateWithOffset=new SimpleDateFormat(“yyy-MM-ddXXX”).parse(dateStr)不要使用
java.util.Date
SimpleDataFormat
。那些是古老的、写得很差的课程。也不是日历。只使用
java.time
类。有偏移量的日期(但没有时间)在逻辑上是有问题的,因为它们没有说明偏移量是在什么时候应用的。我所知道的唯一定义它们的规范是W3CXML模式定义,其中对象有一个可选的
timezoneOffset
。该规范的一种常见解释是,偏移量仅适用于该日期的第一个时刻(通常
00:00
)。因此,如果一个日期有偏移量的变化(如DST的开始或结束,或标准时间的变化),则该信息不会被表示。@MattJohnson Pint“带偏移量的日期”这一概念的有趣来源。我必须指出他们逻辑上的一个缺陷:代表一个地区未来一天的开始不能仅仅用补偿来完成。定义一天开始时使用的偏移量可能会在区域的演变规则中发生变化。您好@MattJohnson Pint,我已经从发布者那里得到确认,XSD转换是数据的来源。很好的提示!好,现在,我按如下方式解析它:
java.util.dateWithOffset=newsimpledateformat(“yyyy-MM-ddXXX”).parse(dateStr)不要使用
java.util.Date
SimpleDataFormat
。那些是古老的、写得很差的课程。也不是日历。只使用
java.time
类。有偏移量的日期(但没有时间)在逻辑上是有问题的,因为它们没有说明偏移量是在什么时候应用的。我所知道的唯一定义它们的规范是W3CXML模式定义,其中对象有一个可选的
timezoneOffset
。该规范的一种常见解释是,偏移量仅适用于该日期的第一个时刻(通常
00:00
)。因此,如果一个日期有偏移量的变化(如DST的开始或结束,或标准时间的变化),则该信息不会被表示。@MattJohnson Pint“带偏移量的日期”这一概念的有趣来源。我必须指出他们逻辑上的一个缺陷:代表一个地区未来一天的开始不能仅仅用补偿来完成。定义一天开始时使用的偏移量可能会在区域的演变规则中发生变化。您好@MattJohnson Pint,我已经从发布者那里得到确认,XSD转换是数据的来源。很好的提示!顺便说一句,我认为“带偏移量的日期”这个毫无意义的想法可能来自SQL标准,多年来它包含了一些这样的奇怪之处。我搜索了SQL:2011的草稿。虽然我确实发现明确提及带时区的
时间也是毫无意义的
,但我发现没有明确提及带时区的
日期
,也没有明确提及不带时区的
。我的印象是它来自XML,@BasilBourque。例如,请参阅。@Ole V.V.谢谢,是的,我已确认其来源是来自XSD的数据提交。关于JDK 8类的使用,您也是对的,但有时在匆忙中我仍然不愿意使用旧的:)但最重要的是,我现在知道它有一个标准格式ISO_OFFSET_DATE,因此感谢您的努力,学习s总是很酷的