将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年答案中使用的类Date
, DateFormat
和SimpleDateFormat
现在已经过时,并且也被certificate设计不佳。 我建议你把它们放在后面,而是使用现代Java日期和时间API java.time
。
链接: Oracle教程:Date Time解释如何使用java.time
。