这可能是我在我的代码中出现的一个非常简单的拼写错误,但无论我做什么,我都无法使其工作。
我有以下代码:
String date="2014-05-22";
String time="09:09:04.145"
String dateAndTime=date.concat(" "+ time);
DateFormat convertDate=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss:SSSZ");
Date dateOfMeasurement=convertDate.parse(dateAndTime);
我尝试使用yyyy-MM-dd'T'HH:mm:ss:SSSZ
和yyyy-MM-dd HH:mm:ss:SSS
进行格式化,但没有任何效果。
我做错了什么? 非常感谢你。
答案 0 :(得分:2)
您正在使用现在由java.time类取代的麻烦的旧旧日期时间类。
您的输入符合ISO 8601标准。在解析/生成表示日期时间值的字符串时,java.time类默认使用ISO 8601格式。因此无需指定格式化模式。
LocalDate ld = LocalDate.parse( "2014-05-22" );
LocalTime lt = LocalTime.parse( "09:09:04.145" );
LocalDateTime ldt = LocalDateTime.of( ld , lt );
LocalDateTime
没有时区概念或从UTC偏移。所以不代表时间轴上的一个时刻。
对于实际时刻,请指定时区。也许您希望输入代表UTC的时刻。
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC );
或者您可能从上下文中了解到另一个特定时区的意图。
ZoneId z = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ldt.atZone( z );
您尝试汇编的格式也由ISO 8601标准定义。只需致电toString
即可生成此类值。
Instant
是java.time中的基本构建块类,表示UTC时间轴上的时刻,分辨率高达纳秒。
String output = zdt.toInstant().toString(); // 2016-09-08T02:46:15Z
ZonedDateTime
通过在方括号中明智地附加时区名称来扩展标准格式。
String output = zdt.toString(); // 2016-09-07T23:46:15-03:00[America/Montreal]
答案 1 :(得分:1)
DateFormat convertDate=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
Date dateOfMeasurement=convertDate.parse(dateAndTime);