我们如何将yyyy-MM-dd-HH.mm.ss.SSSSSS转换为yyyy-MM-dd’T’HH:mm:ss.SSSz在Java中?
任何人都可以告诉我,我们如何在yyyy-MM-dd-HH.mm.ss.SSSSSS
格式yyyy-MM-dd-HH.mm.ss.SSSSSS
日期转换为yyyy-MM-dd-HH.mm.ss.SSSSSS
中的日期yyyy-MM-dd'T'HH:mm:ss.SSSz
在Java中,两者都在输入和输出日期应该是字符串。
我已经使用了apache DateFormatUtils
但是在输出中没有给出毫秒数。
Java 8+
您还可以在Java 8中使用较新的Time API ,类似于……
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
不支持nano / micro秒,但DateTimeFormatter
不支持,你必须使用n
模式,例如yyyy-MM-dd-HH.mm.ss.nnnnnn
Java 7及以下版本
基本答案是,使用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 ,但这就是我
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将其解析为所需的forms。