任何人都可以告诉我们,我们如何将yyyy-MM-dd-HH.mm.ss.SSSSSS
格式的日期转换为Java中的yyyy-MM-dd'T'HH:mm:ss.SSSz
日期,其中输入和输出日期应为字符串。
我使用过apache DateFormatUtils
,但输出中没有给出毫秒数。
答案 0 :(得分:5)
您还可以使用较新的Time API in Java 8,例如......
String formatIn = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String formatOut = "yyyy-MM-dd'T'HH:mm:ss.SSSz";
String valueIn = "2016-01-19-09.55.00.000000";
LocalDateTime ldt = LocalDateTime.parse(valueIn, DateTimeFormatter.ofPattern(formatIn));
System.out.println("< " + ldt);
ZonedDateTime zdt = ZonedDateTime.of(ldt, ZoneId.systemDefault());
String out = DateTimeFormatter.ofPattern(formatOut).format(zdt);
System.out.println("> " + out);
哪些输出......
< 2016-01-19T09:55
> 2016-01-19T09:55:00.000AEDT
这使您更有责任管理时区,这通常可能是更好的解决方案
因为Java 8 API中时区之间的转换让我头疼(缺乏经验:P)
LocalDateTime ldt = LocalDateTime.parse(valueIn, DateTimeFormatter.ofPattern(formatIn));
System.out.println("< " + ldt);
ZonedDateTime here = ldt.atZone(ZoneId.systemDefault());
System.out.println("here " + here);
ZonedDateTime there = here.withZoneSameInstant(ZoneId.of("GMT"));
System.out.println("there " + there);
String out = DateTimeFormatter.ofPattern(formatOut).format(there);
System.out.println("> " + out);
哪些输出......
< 2016-01-19T09:55
here 2016-01-19T09:55+11:00[Australia/Sydney]
there 2016-01-18T22:55Z[GMT]
> 2016-01-18T22:55:00.000GMT
仅供参考:我认为你的输入是使用纳秒/微秒而不是毫秒(一秒钟只有1000毫秒)。 SimpleDateFormat
不支持纳秒/微秒,但DateTimeFormatter
支持纳米/微秒,但您必须使用n
模式,例如yyyy-MM-dd-HH.mm.ss.nnnnnn
基本答案是,使用SimpleDateFormat
....
String formatIn = "yyyy-MM-dd-HH.mm.ss.SSSSSS";
String formatOut = "yyyy-MM-dd'T'HH:mm:ss.SSSz";
String valueIn = "2016-01-19-09.55.00.000000";
SimpleDateFormat in = new SimpleDateFormat(formatIn);
SimpleDateFormat out = new SimpleDateFormat(formatOut);
Date dateIn = in.parse(valueIn);
System.out.println("< " + dateIn);
String valueOut = out.format(dateIn);
System.out.println("> " + valueOut);
哪些输出......
< Tue Jan 19 09:55:00 AEDT 2016
> 2016-01-19T09:55:00.000AEDT
这里的问题是,你可以在不同的时区进行转换,在这种情况下,你可以使用类似的东西......
in.setTimeZone(TimeZone.getTimeZone("GMT"));
dateIn = in.parse(valueIn);
System.out.println("< " + dateIn);
out.setTimeZone(TimeZone.getTimeZone("GMT"));
valueOut = out.format(dateIn);
System.out.println("> " + valueOut);
输出
< Tue Jan 19 20:55:00 AEDT 2016
> 2016-01-19T09:55:00.000GMT
或者如果你想要转换到不同时区的组合。
但是,就个人而言,我会使用Joda-Time,但那就是我
答案 1 :(得分:1)
SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd-HH.mm.ss.SSSSSS");
SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSz");
Date d= s1.parse( "2015-11-11-02.01.11.000001" );
String str= s2.format( d);
System.out.println(str);
使用SimpleDateFormat s1将字符串日期解析为Date项目。然后使用第二个SimpleDateFormat将其解析为所需的形式。
答案 2 :(得分:-2)
String foramt = "yyyy-MM-dd HH:mm:ss.SSS";
String dbdate = "2021-05-19 13:13:20.247";
LocalDateTime ldt = LocalDateTime.parse(dbdate, DateTimeFormatter.ofPattern(foramt));
ZonedDateTime finalDateFormat = ldt.atZone(ZoneId.of("UTC")).withZoneSameInstant(ZoneId.of("UTC"));
System.out.println(finalDateFormat.toOffsetDateTime());