将long(其十进制表示forms表示yyyyMMdd .. date)转换为其他日期格式

我有很长的forms

20120720162145 yyyymmddhhmmss 

我必须将其转换为2012-07-20 4:21 PM表格。 Java中有没有办法使用Date来做到这一点?

这是如何做:

 long input = 20120720162145L; DateFormat inputDF = new SimpleDateFormat("yyyyMMddHHmmss"); DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd K:mm a"); Date date = inputDF.parse(""+input); System.out.println(outputDF.format(date)); 

输出:

 2012-07-20 4:21 PM 

我想提出现代的答案。 2012年的答案是正确的(如果您接受0:21 PM作为时间,否则很容易将其更改为12:21 PM)。 今天我更喜欢

  // convert your long into a LocalDateTime DateTimeFormatter uuuuMmDdHhMmSs = DateTimeFormatter.ofPattern("uuuuMMddHHmmss"); long longDate = 20120720162145L; LocalDateTime dateTime = LocalDateTime.parse(String.valueOf(longDate), uuuuMmDdHhMmSs); // Format the LocalDateTime into your desired format DateTimeFormatter humanReadableFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd h:mm a", Locale.ENGLISH); String formattedDateTime = dateTime.format(humanReadableFormatter); System.out.println(formattedDateTime); 

这打印出所需的

2012-07-20 4:21 PM

我建议您为格式化提供明确的区域设置。 我从上午开始就给英语,PM很难用于其他语言而不是英语,但你选择了。

我注意到在你的问题中,你在2012-07-20 4:21 PM的日期和时间之间有两个空格。 如果你想要填充小时空间,那么它们总是占据两个位置(如果格式化的日期时间在列中彼此相互显示,则很好),在h之前使用pp pad修饰符:

  DateTimeFormatter humanReadableFormatter = DateTimeFormatter.ofPattern("uuuu-MM-dd pph:mm a", Locale.ENGLISH); 

如果您想格式化为20/07/2012 ( 如此重复问题中所述 ):

  DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy"); String formattedDate = dateTime.format(dateFormatter); 

java.time

2012年答案中使用的类DateDateFormatSimpleDateFormat现在已经过时,并且也被certificate设计不佳。 我建议你把它们放在后面,而是使用现代Java日期和时间API java.time

链接: Oracle教程:Date Time解释如何使用java.time