簡體   English   中英

如何在日期之間更改日期格式類型?

[英]How to change Date format type between dates?

如何將此日期類型“ Thu Feb 02 12:00:00 GMT-12:00 2012”更改為另一個日期類型“ yyyy-mm-dd HH:mm:ss”? 如果“ Thu Feb 02 12:00:00 GMT-12:00 2012”是字符串類型,如何轉換“ yyyy-MM-dd HH:mm:ss”的日期類型?

Java代碼:

DateFormat inputDF = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy");
   DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
   Date dd = inputDF.parse("Thu Feb 02 12:00:00 GMT-12:00 2012");
   String strDate = outputDF.format(dd);

輸出為字符串類型。 我想獲取Date類型的輸出,因此添加了以下代碼。

   Date outputDate = outputDF.parse(strDate);

但是,我再次使用“ EEE MMM dd HH:mm:ss Z yyyy”格式的日期。 我想使用這種“ yyyy-MM-dd HH:mm:ss”格式獲取日期,並且還想要日期類型。

我也想得到的輸出類型是日期類型格式。

DateFormat inputDF = new SimpleDateFormat(
                "EEE MMM dd HH:mm:ss Z yyyy");
        DateFormat outputDF = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println(outputDF.format(inputDF.parse("Thu Feb 02 12:00:00 GMT-12:00 2012")));

字符串!=日期

您的主要問題是將字符串視為日期。 它不是。 考慮到“ $ 12.34”不是數字,它是數字和貨幣類型的文本表示形式,用於表示。 您也可以使用日期時間和時區的文字表示。

字符串→日期時間→字符串

因此,第一步是將字符串解析為日期時間對象。 然后使用該日期時間對象生成其日期時間值的文本表示形式。

java.time

您正在使用Java最早版本中的舊日期時間類。 這些類雖然是業界首屈一指的英勇嘗試,但事實證明它們令人困惑和存在缺陷。 避免他們。

Java 8和更高版本中內置的java.time框架取代了麻煩的舊java.util.Date/.Calendar類。 新課程的靈感取自於成功的Joda-Time框架,該框架旨在作為其繼任者,其概念相似但經過重新架構。 JSR 310定義。 ThreeTen-Extra項目擴展。 請參閱《 Oracle教程》

格式化程序

我們必須指定一個編碼模式來定義一個格式化程序,我們將用它來解析您的輸入字符串。 這些代碼與舊的java.text.SimpleDateFormat類相似,但不完全相同。 因此,請仔細研究該文檔 注意將O用於localized zone-offset

請注意,在格式化程序上,我們使用第二個參數指定Locale 該語言環境指定用於解析和翻譯月份和日期名稱的人類語言。 如果省略,則使用JVM的當前默認Locale。 該默認值可以隨時更改,因此我建議始終指定期望的語言環境。

String input = "Thu Feb 02 12:00:00 GMT-12:00 2012";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern ( "EEE MMM dd HH:mm:ss O yyyy" , Locale.ENGLISH );
ZonedDateTime zdt = ZonedDateTime.parse ( input , formatter );

轉儲到控制台。

System.out.println ( "zdt: " + zdt );

2012-02-02T12:00-12:00

該輸出為標准ISO 8601格式。 我建議在可能的情況下使用這些標准格式,因為它們易於閱讀,明確且標准。

所需的格式接近標准,但用SPACE代替了T 並且您的格式忽略了任何與UTC或時區的偏差 忽略時區是有風險的,因為人類讀者可能會假定錯誤的時區。 但是,如果您堅持要自己定義這種模式。

DateTimeFormatter formatterOutput = DateTimeFormatter.ofPattern ( "yyyy-MM-dd HH:mm:ss" );
String output = zdt.format ( formatterOutput );

轉儲到控制台。

System.out.println ( "zdt: " + zdt + " output: " + output );

zdt:2012-02-02T12:00-12:00輸出:2012-02-02 12:00:00

更好的是,讓java.time為您本地化。 注意我們如何調用withLocale給格式化程序一個Locale,其語言將用於月份名稱和日期名稱。

DateTimeFormatter formatterLocalized = DateTimeFormatter.ofLocalizedDateTime ( FormatStyle.FULL );
formatterLocalized = formatterLocalized.withLocale ( Locale.CANADA_FRENCH );
String outputLocalized = zdt.format ( formatterLocalized );

轉儲到控制台。

System.out.println ( "zdt: " + zdt + " output: " + output + " outputLocalized: " + outputLocalized );

zdt:2012-02-02T12:00-12:00輸出:2012-02-02 12:00:00 outputLocalized:jeudi 2février2012 12 h 00 -12:00

String strDate = "Thu Feb 02 12:00:00 GMT-12:00 2012";
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy - HH:mm:ss");
dateFormat.format(strDate);

And to get the result in Date, You can use the following :

Date d = new Date(dateFormat.format(strDate));
String dateStart = "Thu Feb 02 12:00:00 GMT-12:00 2012";
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1 = format.parse(**dateStart**);
System.out.prinln("formatted date.." + d1);

你不能那樣做。 Date對象沒有表示格式。 它只有數據。 格式化程序具有格式。 格式化用於顯示數據。

暫無
暫無

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

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