![](/img/trans.png)
[英]Java/Kotlin: Why does Jackson parse dates differently from SimpleDateFormat?
[英]Retrieve two equal dates from SimpleDateFormat in java
我制作了這個片段來顯示我的問題:
import java.text.SimpleDateFormat;
public class Foo {
public static void main(String[] args) {
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2);
}
}
date1
和date2
以秒為單位表示,所以我期望輸出中有兩個不同的日期,但日期打印相同。 我查看了這個在線工具 ,你可以看到日期與兩個不同的日子有關。
我怎么解決這個問題?
兩個時間戳之間的差異恰好是12個小時。
SimpleDateFormat
的h
標識符以AM / PM(1-12)格式化小時,因此您實際上不輸出實際差異:日期從AM轉移到PM。
嘗試使用k
或H
標識符將日期中的小時格式化為(1-24)或(0-23)。
SimpleDateFormat formatter = new SimpleDateFormat("mm kk dd MM yyyy");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 45 13 03 10 2014
你也可以輸出的AM / PM標記與a
標識符是這樣的:
SimpleDateFormat formatter = new SimpleDateFormat("mm hh dd MM yyyy aa");
String date1 = "1412293500";
String date2 = "1412336700";
String dateString1 = formatter.format(Long.parseLong(date1 + "000"));
String dateString2 = formatter.format(Long.parseLong(date2 + "000"));
System.out.println(dateString1 + " " + dateString2); // prints 45 01 03 10 2014 AM 45 01 03 10 2014 PM
這是因為您的日期是12小時appart,您使用小寫'h'進行小時格式化。 日期分別是凌晨1點和1點。 為了在輸出中看到這個,請使用大寫“H”或將“a”添加到“am / pm”標記的格式中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.