Java 8有一个全新的日期和时间API.此API中最有用的类之一是LocalDateTime,用于保存与时区无关的日期时间值.
java.util.Date为此目的,使用遗留类可能有数百万行代码.因此,当连接新旧代码时,需要在两者之间进行转换.由于似乎没有直接的方法来实现这一点,怎么办呢?
Java 7 SimpleDateFormat通过字符X(而不是大写或小写Z)在ISO 8601格式的类中引入了支持.在Java 6中支持这样的格式需要预处理,因此最好的方法是问题.
这种新格式是Z(大写Z)的超集,另外还有两种变体:
因此,正如人们可以从Java 7文档中SimpleDateFormat看到的那样,以下3种格式现在是有效的(而不仅仅是ZJava 6中涵盖的第二种格式),当然,等效:
正如之前关于支持这种"扩展"时区格式的特殊情况的问题所讨论的那样,始终使用':'作为分隔符,将Java 7功能向后移植到Java 6中的最佳方法是将类子SimpleDateformat类化并覆盖其parse()方法,即:
public Date parse(String date, ParsePosition pos)
{
String iso = ... // Replace the X with a Z timezone string, using a regex
if (iso.length() == date.length())
{
return null; // Not an ISO 8601 date
}
Date parsed …Run Code Online (Sandbox Code Playgroud) 这是我的代码:
Integer value = 19000101 ;
Run Code Online (Sandbox Code Playgroud)
如何将以YYYYMMDD格式表示的上述Integer 转换为YYYY-MM-DD格式 java.util.Date?
我从JSON API获得一个日期,看起来像这样的"2018-04-10T04:00:00.000Z".我想转换它以获得Date或String对象并获得类似"01-04-2018"的"dd-MM-YYYY".我该怎么做?
表达方式
OffsetDateTime.parse("2016-08-24T18:38:05.507+0000")
导致以下错误:
java.time.format.DateTimeParseException:无法在索引23处解析文本'2016-08-24T18:38:05.507 + 0000'
另一方面,
OffsetDateTime.parse("2016-08-24T18:38:05.507+00:00")
可以正常工作。
DateTimeFormatter的文档页面提到了不带冒号的区域偏移量作为示例。我究竟做错了什么?我不想破坏我的日期字符串来安抚Java。