我有很长的形式
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
我建议您为格式化提供明确的语言环境。我已经给出了英语,因为 AM 和 PM 在英语以外的其他语言中几乎不使用,但你可以选择。
我注意到在您的问题中,日期和时间之间有两个空格2012-07-20 4:21 PM
。如果您希望填充小时空间,以便它们始终占据两个位置(如果格式化的日期时间在一列中彼此下方显示,那就太好了),请在 :pp
之前使用 pad 修饰符h
:
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);
2012 年的答案中使用的类现在早已过时Date
,DateFormat
并且SimpleDateFormat
也被证明设计不佳。我建议您将它们抛在脑后,而使用java.time
现代 Java 日期和时间 API。
链接: Oracle 教程:日期时间解释如何使用java.time
.