Mil*_*ind 1 date-formatting java-8
我正在尝试构建ISO 8601格式("yyyy-MM-dd'T'HH:mm:ss.SSSXXX").我使用Java 8 DateFormatBuilder来解析ISO 8601格式的字符串.
当我遇到UTC时间格式的输出是"2016-11-01T16:51:35.000Z",但我真正需要的是00:00而不是Z.我尝试使用DateFormatBuilder构建但没有成功.
我终于完成了以下工作
DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DATETIMEFOMATTER = builder.parseCaseInsensitive()
.append(DateTimeFormatter.ISO_OFFSET_DATE_TIME)
.toFormatter();
ZonedDateTime zonedDate = ZonedDateTime.parse(date, DATETIMEFOMATTER);
String utcDate = zonedDate.format(FORMATTER);
if (utcDate.indexOf("Z") != -1){
utcDate = utcDate.replace("Z", "-00:00");
}
Run Code Online (Sandbox Code Playgroud)
我不想解析字符串并用"00:00"替换Z. Joda API更易于使用.有没有想过我们是否可以使用Java 8 DateTimeFormatterBuilder构建?我确实提到了一些stackoverflow问题,但没有工作.我可能做错了什么.有人可以帮忙吗?
java.time类中内置了对日期时间值的ISO 8601标准格式的支持.无需指定格式模式.
您的输入字符串可以由Instant类直接解析.
Instant instant = Instant.parse( "2016-11-01T16:51:35.000Z" );
Run Code Online (Sandbox Code Playgroud)
要根据需要以三个(0,3,6或9位数)的组生成具有尽可能多的小数位数的类似字符串,只需调用即可toString().
String output = instant.toString();
Run Code Online (Sandbox Code Playgroud)
2016-11-01T16:51:35Z
这Z是商业,航空航天和军事的标准和共性.的Z是短期的Zulu,并指UTC.
虽然这Z应该是完全可以接受的,但你似乎要求将UTC的偏移量作为零小时和零分钟的数量+00:00.虽然零小时和分钟的正数也可以接受,负-00:00是不接受的,违反ISO 8601您的问题的使用负零点偏移到了正零被替换的需求.
请注意,RFC 3339应该是ISO 8601的配置文件,但它违反了这个规则,允许负零偏移,并给出了一个特殊而混乱的含义.这不是RFC 3339中唯一糟糕的设计决策.所以我建议避免使用RFC并严格遵守ISO 8601.
为了轻松获得所需的字符串,并且没有DateTimeFormatter明确打扰,请OffsetDateTime在分配已定义为常量的UTC偏移时使用ZoneOffset.UTC.然后直接打电话toString.
OffsetDateTime odt = instant.atOffset( ZoneOffset.UTC );
String output = odt.toString();
Run Code Online (Sandbox Code Playgroud)
2016-11-01T16:51:35 + 00:00
| 归档时间: |
|
| 查看次数: |
7716 次 |
| 最近记录: |