日期功能正在修剪秒,其中秒是00

时间:2019-02-05 11:44:14

标签: java datetime java-8 date-conversion parseexception

OffsetDateTime odtB = OffsetDateTime.parse("2019-02-02T13:55:00Z");
odtB.toString()

2019-02-02T13:55打印为输出。正因为如此,我的转换函数抛出了错误!

SimpleDateFormat formatter = new SimpleDateFormat("dd-MMM\''YY HH:mm aa");
String parsedDate = odtB.format(otdB);

如何在秒数为00时停止OffsetDateTime或任何其他Java DateTime类修剪秒数??

3 个答案:

答案 0 :(得分:3)

在java8中,您不再需要SimpleDateFormat,这很麻烦。

我建议使用ISO_OFFSET_DATE_TIME

  

ISO日期时间格式化程序,使用以下命令格式化或解析日期时间:   偏移量,例如“ 2011-12-03T10:15:30 + 01:00”。

示例:

import java.util.*;
import java.time.*;
import java.time.format.*;

public class HelloWorld{

     public static void main(String []args){
        OffsetDateTime odtB = OffsetDateTime.parse("2019-02-02T13:55:00Z");
        DateTimeFormatter f = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
        System.out.print(f.format(odtB)); // 2019-02-02T13:55:00Z
     }
}

答案 1 :(得分:1)

SimpleDateFormat来自使用Dates的一种古老而过时的方式。它也不是线程安全的,还有很多其他问题。换句话说,不要使用它。您需要使用DateTimeFormatter,请阅读javadoc(提供的链接)。它给出了详细的用法说明。但是,导致问题的原因是在格式掩码中缺少秒钟的占位符,因此当您的String包含秒钟时,它与您的格式不符。将格式更改为dd-MMM-YY HH:mm:ss aa重点放在“ ss”上-丢失的秒占位符,它将起作用

答案 2 :(得分:0)

如果使用java.time.LocalDateTime(自Java 8开始,应该使用),则可以使用不同的DateTimeFormatter,可以将其配置(给它们一个模式)以不修剪尾随零。请参见下面的示例,使用日期String并稍加调整模式:

LocalDateTime ldt = LocalDateTime.parse("2019-02-02T13:55:00Z", DateTimeFormatter.ISO_DATE_TIME);
System.out.println(ldt.format(DateTimeFormatter.ofPattern("dd-MMM\''YY HH:mm:ss")));

这将打印出02-Feb'19 13:55:00,希望是您想要的。