簡體   English   中英

Java將日期轉換為其他格式

[英]Java converting a Date to a different format

我有以下格式的日期字符串:

String fieldAsString = "11/26/2011 14:47:31";

我正在嘗試將其轉換為以下格式的Date類型對象: “ yyyy.MM.dd HH:mm:ss”

我嘗試使用以下代碼:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss");
Date newFormat = sdf.parse(fieldAsString);

但是,這引發了一個例外,那就是不可解析的日期。

所以我嘗試了這樣的事情:

Date date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(fieldAsString);
String newFormat = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss").format(date)

但是,這種新格式現在是“字符串”格式,但是我希望我的函數以“日期”對象類型返回新的格式化日期。 我該怎么做?

謝謝!

您似乎對Date對象具有格式有一種印象。 沒有。 聽起來您只需要這樣:

Date date = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").parse(fieldAsString);

(請注意,您應該考慮指定語言環境和時區。)

然后,您就有了Date值。 格式僅在以后需要將其轉換為文本時才有意義... 那是您應該指定格式的時候。 將表示的值(在這種情況下為即時)與潛在的文本表示分開很重要。 就像整數-這兩個值之間沒有區別:

int x = 0x10;
int y = 16;

它們是相同的值,只是源代碼中的表示方式不同。

此外,考慮將Joda Time用於所有日期/時間工作-與java.util.*相比,它是一種更加簡潔的API。

喬恩·斯基特(Jon Skeet )的回答是正確而完整的。

在java.util.Date內部(和Date-Time如下所示),日期時間值以Unix 紀元以來的毫秒數存儲。 里面沒有弦! 當需要以人類可讀的格式表示日期時間的文本表示時,請調用toString或使用格式化程序對象創建 String對象。 同樣,在解析時,輸入字符串也將被丟棄,而不是存儲在Date對象(或Joda-Time中的DateTime對象)內部。

喬達時代

有趣的是,這是Skeet先生提到的與Joda-Time一起完成這項工作的(更好)方法。

一個主要的區別是,盡管java.util.Date類似乎具有時區,但沒有。 相反,Joda-Time DateTime確實知道自己的時區。

String input = "11/26/2011 14:47:31";

// From text to date-time.
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Time zone intended but unrecorded by the input string.
DateTimeFormatter formatterInput = DateTimeFormat.forPattern( "MM/dd/yyyy HH:mm:ss" ).withZone( timeZone );
// No words in the input, so no need for a specific Locale.
DateTime dateTime = formatterInput.parseDateTime( input );

// From date-time to text.
DateTimeFormatter formatterOutput_MontréalEnFrançais = DateTimeFormat.forStyle( "FS" ).withLocale( java.util.Locale.CANADA_FRENCH ).withZone( DateTimeZone.forID( "America/Montreal" ) );
String output = formatterOutput_MontréalEnFrançais.print( dateTime );

轉儲到控制台...

System.out.println( "input: " + input );
System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime as milliseconds since Unix epoch: " + dateTime.getMillis() );
System.out.println( "dateTime in UTC: " + dateTime.withZone( DateTimeZone.UTC ) );
System.out.println( "output: " + output );

運行時...

input: 11/26/2011 14:47:31
dateTime: 2011-11-26T14:47:31.000-10:00
dateTime as milliseconds since Unix epoch: 1322354851000
dateTime in UTC: 2011-11-27T00:47:31.000Z
output: samedi 26 novembre 2011 19:47

在StackOverflow中搜索“ joda”以找到更多示例。

暫無
暫無

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

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