【问题标题】:how to print DateTime value如何打印日期时间值
【发布时间】:2017-11-02 15:17:41
【问题描述】:

我有这段代码,我想将时间打印为字符串,日期和时间之间没有“T”字符。

String datetime4 =new StringBuilder().append(date4).append(time4).toString();

DateTime newdt=new  DateTime(datetime4);
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss");
newdt = formatter.parseDateTime(datetime4);
System.out.println(newdt);

注意date4time4 是字符串变量。 它将打印:

2017-11-04T11:23:00.000+02:00

【问题讨论】:

  • 使用 2 种不同的 dateFormats 解析并重新格式化它
  • 为什么不使用 java8 LocalDateTime?
  • 请提供minimal reproducible example。 “T”从何而来?
  • 为什么不简单System.out.println(new StringBuilder().append(date4).append(" ").append(time4).toString());
  • @Greg 'T' 不是来自连接。您看到的是约会的内部演示。要计算差异,您不需要字符串

标签: java datetime jodatime datetime-format


【解决方案1】:

一种方法:

    String date4 = "2017-02-02";
    String time4 = "12:00:00";

    //To parse it to Temporal object
    DateTime dateTime = DateTime.parse(date4 +"T"+ time4);

    // to output it as String in a prefered format (Thanks @Hugo)
    System.out.println(dateTime.toString("yyyy-MM-dd HH:mm:ss"));

如果你更喜欢 Java 8,我认为你需要使用格式化程序,LocalDateTime 不会像 JodaTime 那样重载 toString。

但不确定为什么要这样做?似乎只附加日期和时间就足够了?无论如何,如果您想解析日期,则需要将 T 作为有效日期时间格式传递给 DateTime 以及 LocalDateTime(如果使用 Java8),那么您可以根据需要重新格式化它。

String date4 = "2017-02-02";
String time4 = "12:00:00";

LocalDateTime dateTime = LocalDateTime.parse(date4 +"T"+ time4);

System.out.println(dateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));

【讨论】:

    【解决方案2】:

    使用 Java 8 LocalDateTime;

    LocalDateTime dateTime;
    
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss");
    DateTimeFormatter desiredFormat = DateTimeFormatter.ofPattern("uuuu-MM-dd HH:mm:ss");
    dateTime = LocalDateTime.parse("2017-06-01T12:10:10", formatter);
    System.out.println(desiredFormat.format(dateTime));
    

    【讨论】:

    • 很好的补充,可以看到 Java 8 版本。对于解析,您不需要格式化程序,因为输入字符串已经是 LocalDateTime 的默认格式(它是 ISO 8601)。 LocalDateTime.parse("2017-06-01T12:10:10") 也可以。我猜,使用哪个版本主要是个人喜好问题。
    【解决方案3】:

    当你这样做时:

    System.out.println(newdt);
    

    您正在打印newdt 变量,并在内部println 调用对象上的toString() 方法。

    由于这个变量的类型是DateTime,所以这段代码输出了newdt.toString()的结果。而Datetime.toString() 方法使用包含“T”的默认格式。

    如果您希望输出 String 具有不同的格式,您可以执行以下操作:

    System.out.println(newdt.toString("yyyy-MM-dd HH:mm:ss"));
    

    输出将是:

    2017-11-04 11:23:00

    (没有“T”)

    您可以将此版本的toStringDateTimeFormatter 接受的任何模式一起使用。


    您还可以为您想要的格式创建另一个DateTimeFormatter

    DateTimeFormatter withoutT = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss");
    System.out.println(withoutT.print(newdt));
    

    输出将是相同的,由您选择。

    【讨论】:

    • 哦,谢谢你,我不知道 toString 接受一个模式。不错,这个要记住!每天学习。
    • 这个版本的toString 是一个不错的快捷方式。但您也可以创建另一个 DateTimeFormatter(我已在答案中添加了此替代项)。
    猜你喜欢
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多