使用Java将epoch转换为带小数秒的日期

时间:2017-04-14 17:55:51

标签: java datetime datetime-format milliseconds

我有一个日期,我想换成不同的格式。

当前格式:Fri Apr 07 08:21:19 MDT 2017 所需格式:2017-04-07T13:28:41.00MDT。我希望将所需的格式输出作为字符串。

我目前正在这样做:

DateTimeFormatter sourceFormat = DateTimeFormatter.ofPattern("EEE MMM dd HH:mm:ss z uuuu");
ZonedDateTime dateParsed = ZonedDateTime.parse(dateStr, sourceFormat); 
String fullDateTimeStr = fullDateTime.format(dateParsed);

格式化是正确的,但我遇到的主要问题是保留小数秒(时区之前的两个数字。)我知道我收到的日期有保留的ms /小数秒,因为当我打印出long epoch = ((Date) date).getTime();时,我得到了纪元时间,我可以转换它(使用在线转换工具),它显示正确的日期/时间与ms。

发生了什么?

1 个答案:

答案 0 :(得分:0)

SELECT 
    'col1' as `col_name`,
    SUM(IF(`col1` = 'na',1,0)) as `na`,
    SUM(IF(`col1` = 'na',0,1)) as `not_na`
FROM `table`
UNION
SELECT 
    'col2' as `col_name`,
    SUM(IF(`col2` = 'na',1,0)) as `na`,
    SUM(IF(`col2` = 'na',0,1)) as `not_na`
FROM `table`;

示例输出:

    DateTimeFormatter targetFormat = DateTimeFormatter.ofPattern("uuuu-MM-dd'T'HH:mm:ss.SSSz");
    ZonedDateTime zdt = ZonedDateTime.now();
    System.out.println(zdt.format(targetFormat));

格式模式中需要2017-04-14T21:19:58.409CEST 毫秒。

请考虑您是否需要通常含糊不清的三个或四个字母的时区缩写。我更喜欢使用SSS作为DateTimeFormatter.ISO_ZONED_DATE_TIME之类的输出。这也可以避免您自己构建模式字符串。