【问题标题】:java.util.date to String using DateTimeFormatterjava.util.date 到 String 使用 DateTimeFormatter
【发布时间】:2017-02-13 17:46:20
【问题描述】:

如何使用

将 java.util.Date 转换为 String
 DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss")

我得到的 Date 对象被传递

DateTime now = new DateTime(date);

【问题讨论】:

  • 请出示您的完整代码
  • @PeterKuebler 我正在尝试使用 DateTimeFormatter
  • 为什么不使用SimpleDateFormat?
  • @CorkKochi 如果您使用的是 Java 8,则应该考虑使用新的 java time api 而不是旧的 Date api 或 joda time。

标签: java datetime java-8 jodatime datetimeformatter


【解决方案1】:

如果您使用的是 Java 8,则首先不应使用 java.util.Date(除非您从无法控制的库中收到 Date 对象)。

在任何情况下,您都可以使用以下方法将 Date 转换为 java.time.Instant:

Date date = ...;
Instant instant = date.toInstant();

由于您只对日期和时间感兴趣,没有时区信息(我假设一切都是 UTC),您可以将该瞬间转换为 LocalDateTime 对象:

LocalDateTime ldt = instant.atOffset(ZoneOffset.UTC).toLocalDateTime();

最后你可以打印出来:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss");
System.out.println(ldt.format(fmt));

或者使用预定义的格式化程序DateTimeFormatter.ISO_LOCAL_DATE_TIME。

System.out.println(ldt.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));

请注意,如果您不提供格式化程序,则调用 ldt.toString 会以标准 ISO 8601 格式(包括毫秒)输出 - 这对您来说可能是可以接受的。

【讨论】:

  • 我正在使用的服务正在返回一个 java.util.Date 对象
  • @CorkKochi 如果您必须使用java.util.Date 对象,请按照此答案中所示进行转换。查看添加到旧类的新转换方法,例如Date.from( Instant ) 和Date::toInstant()。
【解决方案2】:
java.util.Date date = new java.util.Date(System.currentTimeMillis());
Instant instant = date.toInstant();

LocalDateTime ldt = instant.atZone(ZoneId.systemDefault()).toLocalDateTime();

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
System.out.println(ldt.format(fmt));

【讨论】:

    【解决方案3】:
    DateTime dt = new DateTime(date);
    DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
    dt.toString(dtf)
    

    【讨论】:

    • dt.toString(DateTimeFormatter.ISO_INSTANT)
    【解决方案4】:

    因为我假设您使用的是 joda API: 因此,DateTimeFormatter 来自 org.joda.time.format.DateTimeFormatter:

     String dateTime = "02-13-2017 18:20:30";
    // Format for input
    DateTimeFormatter dtf = DateTimeFormat.forPattern("MM-dd-yyyy HH:mm:ss");
    // Parsing the date
    DateTime jodatime = dtf.parseDateTime(dateTime);
    
    System.out.println(jodatime );
    

    【讨论】:

    • @CorkKochi 我希望你实际上没有打电话给new DateTime(new Date())。
    • @shmosel 我发布了答案
    【解决方案5】:
    DateTimeFormatterOBJECT=DateTimeFormatter.ofPattern("DD/MMM/YYYY HH//MM/SS");
    
    String MyDateAndTime= LocalDate.now().format(DateTimeFormatterOBJECT);
    

    【讨论】:

    • 您可以使用上面的代码通过在第一行代码中指定格式来获取您自己格式的简单日期,您还可以在第二行代码中使用任何加号或减号日期函数;
    • 要为您的答案添加说明,请编辑您的答案,而不是使用 cmets。
    【解决方案6】:

    你可以使用joda时间格式化类:

    import org.joda.time.DateTime;
    import org.joda.time.DateTimeZone;
    import org.joda.time.format.DateTimeFormat;
    import org.joda.time.format.DateTimeFormatter;
    # conflict with import java.time.format.DateTimeFormatter;
    
    final DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss")
                .withZone(DateTimeZone.UTC);
    
        System.out.println(DateTime.now().toString(formatter));
    

    【讨论】:

    • 您也可以使用withZoneUTC() 代替withZone(DateTimeZone.UTC),这会导致不必要地导入DateTimeZone 类。
    猜你喜欢
    • 1970-01-01
    • 2017-09-17
    • 2018-10-15
    • 2015-06-08
    • 2011-01-12
    • 2018-11-19
    • 2019-05-18
    • 2014-05-25
    • 2015-01-30
    相关资源
    最近更新 更多