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类修剪秒数??
答案 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
,希望是您想要的。