簡體   English   中英

如何將timestamp字符串轉換為java.util.Date

[英]how to convert timestamp string to java.util.Date

我需要將時間戳字符串轉換為java.util.Date 例如:

MMDDYYHHMMSSMM-DD-YY HH-MM-SS

MM是月份, DD是日期, YY是年份, HH是小時, MM是分鍾, SS是秒。

可以這樣做:

DateFormat format = new SimpleDateFormat("MMddyyHHmmss");
Date date = format.parse("022310141505");

但我強烈建議你改用Joda Time 這是一個更好的日期/時間庫,很長很長的路要走。 特別是,Joda Time中的格式化程序/解析器是線程安全的,因此您可以自由地和靜態地重用它們; java.text.SimpleDateFormat 不是線程安全的,因此您需要為每個線程創建一個或使用synchronized塊序列化對它的訪問。

TL;博士

java.time.LocalDateTime.parse(
    "012318123456" ,
    DateTimeFormatter.ofPattern( "MMdduuHHmmss" )
).format( 
    DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" )
)

01-23-18 12-34-56

java.time

現代方法使用java.time類。

定義格式模式以匹配輸入字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "MMdduuHHmmss" ) ;

您的兩位數年份將被解釋為21世紀(20xx)。

解析為LocalDateTime因為您的輸入字符串缺少任何時區指示符或與UTC的偏移量。

LocalDateTime ldt = LocalDateTime.parse( "012318123456" , f ) ;

ldt.toString():2018-01-23T12:34:56

生成所需格式的字符串。

DateTimeFormatter fOut = DateTimeFormatter.ofPattern( "MM-dd-uu HH-mm-ss" ) ;
String output = ldt.format( fOut  );

01-23-18 12-34-56

ISO 8601

由於多種原因,您的兩種格式都很糟糕。

序列化日期時間值時,請盡可能使用標准ISO 8601格式。 它們設計實用,易於通過機器解析,易於人類跨文化閱讀。

對於諸如你的日期時間,中間的T將日期部分與時間部分分開。

2018-01-23T12:34:56


關於java.time

java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.DateCalendarSimpleDateFormat

現在處於維護模式Joda-Time項目建議遷移到java.time類。

要了解更多信息,請參閱Oracle教程 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310

從哪里獲取java.time類?

ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如IntervalYearWeekYearQuarter ,和更多

使用帶有適當格式字符串的SimpleDateFormat (小心使用正確的格式字母,大寫和小寫有不同的含義!)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM