2

我有很长的形式

20120720162145
yyyymmddhhmmss

我必须将其转换为2012-07-20 4:21 PM形式。Java有什么办法可以做到这一点Date吗?

4

2 回答 2

8

就是这样:

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-07-20T10:58:09.857 回答
0

我想贡献现代答案。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);

java.time

2012 年的答案中使用的类现在早已过时DateDateFormat并且SimpleDateFormat也被证明设计不佳。我建议您将它们抛在脑后,而使用java.time现代 Java 日期和时间 API。

链接: Oracle 教程:日期时间解释如何使用java.time.

于 2018-02-01T11:01:18.043 回答