如何获得这种日期格式?

时间:2018-06-01 08:11:46

标签: java date groovy

我从JSON获取两个日期字段,如May 22 12:05:41 UTC 20182018-05-22 12:05:41.512这样的文字,但我必须更改为MM-dd-yyyy HH:mm:ss格式。

2 个答案:

答案 0 :(得分:4)

只是要清楚 - 日期/时间对象与格式无关。它们只是自固定时间点(通常是Unix Epoch)以来经过的时间量的容器,因此您无法更改其格式本身

但是,您可以生成String指定模式。

在Java中处理日期/时间时,您应该使用Java 8(或ThreeTen后端口)中引入的日期/时间API

例如......

String date1 = "May 22 12:05:41 UTC 2018";
DateTimeFormatter format1 = DateTimeFormatter.ofPattern("MMM dd HH:mm:ss z yyyy", Locale.ENGLISH);
LocalDateTime ldt1 = LocalDateTime.parse(date1, format1);

String date2 = "2018-05-22 12:05:41.512";
DateTimeFormatter format2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH);
LocalDateTime ldt2 = LocalDateTime.parse(date2, format2);

DateTimeFormatter format3 = DateTimeFormatter.ofPattern("MM-dd-yyyy HH:mm:ss", Locale.ENGLISH);
System.out.println(ldt1.format(format3));
System.out.println(ldt2.format(format3));

哪些输出......

05-22-2018 12:05:41
05-22-2018 12:05:41

由于您的某个输入具有与之关联的时区,因此将其考虑在内是合适的

ZonedDateTime zdt = ZonedDateTime.parse(date1, format1);
LocalDateTime ldt1 = zdt.withZoneSameInstant(ZoneId.systemDefault()).toLocalDateTime();

输出(对于我当前的位置)

05-22-2018 22:05:41

答案 1 :(得分:0)

您可以使用此代码

DateFormat format = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss");
DateFormat inputFormat1 = new SimpleDateFormat("MMM dd HH:mm:ss z yyyy");
DateFormat inputFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
String date1 = "May 22 12:05:41 UTC 2018";
String date2 = "2018-05-22 12:05:41.512";
System.out.println(format.format(inputFormat1.parse(date1)));
System.out.println(format.format(inputFormat2.parse(date2)));