【问题标题】:java.util.Date returning --> 2016-12-26 14:18:57.0 want to remove this .0java.util.Date 返回 --> 2016-12-26 14:18:57.0 想要删除这个 .0
【发布时间】:2017-01-06 07:11:33
【问题描述】:

这是返回日期但在客户端我得到的代码

2016-12-26 14:18:57.0 在客户端。什么是可能的解决方案.. 我在客户端使用 node.js。但我认为这与这个问题无关。我想删除这个 0

SimpleDateFormat sdf = new SimpleDateFormat(format);
    Date date = sdf.parse(value);
    if (!value.equals(sdf.format(date))) {
      date = null;
    }
    return date != null;

【问题讨论】:

  • 你的格式是什么??
  • 更改format,你会得到你想要的。 <musing> 嗯……你实际上已经得到了你想要的,你只是没有得到你想要的。太糟糕的电脑无法读懂你的想法来知道你想要什么,只能按照你说的去做,对吧? </musing>

标签: java simpledateformat java.util.date


【解决方案1】:

尝试在 SimpleDateFormat 构造函数中设置正确的格式。像这样的:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String value = "2016-12-26 14:18:57";
Date date = sdf.parse(value);
if (!value.equals(sdf.format(date))) {
    System.out.println("not equals");
}
System.out.println("date = " + date);

【讨论】:

    【解决方案2】:

    您没有为 SimpleDateFormat 构造函数提供格式模式字符串,因此它使用了一些default pattern。解决方案是提供正确的格式字符串。

    格式化可以这样完成:

    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss.SSS")
    

    这会导致例如在

    29.02.2016 23:01:15.999
    

    您希望在格式字符串中省略 S 格式符号(毫秒)。例如:

    SimpleDateFormat sdf = new SimpleDateFormat("dd.MM.yyyy HH:mm:ss")
    

    当然,您需要将此示例更改为您的格式需要。玩一下符号的顺序和数量,授予the docs

    【讨论】:

      【解决方案3】:

      tl;博士

      LocalDateTime.parse( 
          "2016-12-26 14:18:57.0".replace( " " , "T" )
      )
      .truncatedTo( ChronoUnit.SECONDS )
      .toString()
      .replace( "T" , " " )
      

      避免使用旧的日期时间类

      您正在使用麻烦的旧日期时间类,现在是遗留的,被 java.time 类取代。

      ISO 8601

      首先替换输入字符串中间的空格,使其符合标准 ISO 8601 格式。

      String input = "2016-12-26 14:18:57.0".replace( " " , "T" );
      

      LocalDateTime

      解析为 LocalDateTime,因为您的输入字符串缺少任何与 UTC 或时区偏移的指示。

      LocalDateTime ldt = LocalDateTime.parse( input );
      

      只需调用toString 即可生成字符串。默认情况下,使用 ISO 8601 格式创建字符串。如果该值没有小数秒,则不会出现小数点或任何小数秒数字。

      String output = ldt.toString ();
      

      ldt.toString(): 2016-12-26T14:18:57

      如果您不喜欢中间的T,请用空格替换。

      output = output.replace( "T" , " " );
      

      2016-12-26 14:18:57

      如果您的输入可能带有小数秒,并且您想完全删除该部分数据而不是仅仅抑制其显示,请截断 LocalDateTime 对象。

      LocalDateTime ldtTruncated = ldt.truncatedTo( ChronoUnit.SECONDS );  // Truncate any fraction of a second.
      

      关于java.time

      java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.DateCalendarSimpleDateFormat

      Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。

      要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310

      从哪里获得 java.time 类?

      ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如IntervalYearWeekYearQuartermore

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-23
        • 1970-01-01
        • 1970-01-01
        • 2023-03-26
        • 1970-01-01
        • 2012-07-05
        • 1970-01-01
        • 2019-09-22
        相关资源
        最近更新 更多