Java时间戳格式转换

时间:2017-11-29 10:02:14

标签: java

我在字符串属性中有一个Timestamp格式。当我格式化它是添加一些额外的分钟,我可以看到偏差在几分钟。 有任何人面对。请在这里帮助我

String dddddd="2017-11-29 09:24:03.857921";
SimpleDateFormat  fullMonthFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
SimpleDateFormat  fullMonthFormat2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSSSSS");
Date strd11;
strd11=fullMonthFormat1.parse(dddddd);
System.out.println("chec date"+strd11);

String aa=fullMonthFormat2.format(strd11);
System.out.println("aa date"+aa);

o/p
chec dateWed Nov 29 09:38:20 IST 2017
aa date29-Nov-2017 09:38:20.000921 

2 个答案:

答案 0 :(得分:3)

我认为问题是你的毫秒,857921毫秒等于~14分钟(14,2986833),这似乎是添加到输出的时间(输出正确,输入字符串或模式需要修复,如果你不想要这种行为)

答案 1 :(得分:2)

TestingTest已经回答了你的问题。然而,如果你想要一个不会重新计算分钟的不同行为,你可以使用java.time.LocalDateTime(你需要Java 8)。这个课程不会像SimpleDateformat那样搞乱分钟。

请参阅下面的代码段中的差异:

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

public class TimeChecks {

    public static void main(String[] args) throws ParseException {
        String dddddd = "2017-11-29 09:24:03.857921";
        SimpleDateFormat fullMonthFormat1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS");
        SimpleDateFormat fullMonthFormat2 = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss.SSSSSS");
        Date strd11;
        strd11 = fullMonthFormat1.parse(dddddd);
        System.out.println("chec date" + strd11);

        String aa = fullMonthFormat2.format(strd11);
        System.out.println("aa date" + aa);

        LocalDateTime localDate = LocalDateTime.parse(dddddd, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss.SSSSSS"));
        System.out.printf("Local date: %s%n", localDate);
    }
}

打印出来:

chec dateWed Nov 29 09:38:20 GMT 2017
aa date29-Nov-2017 09:38:20.000921
Local date: 2017-11-29T09:24:03.857921

正如您所看到的,本地日期时间不会改变分钟数 - 它会保持毫秒数。