[英]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最早版本中的舊日期時間類。 這些類雖然是業界首屈一指的英勇嘗試,但事實證明它們令人困惑和存在缺陷。 避免他們。
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.