簡體   English   中英

在java中將dateTime轉換為dd / MM / yy格式的日期

[英]Convert dateTime to date in dd/MM/yy format in java

我有一個JODA DateTime 2012-12-31T13:32:56.483+13:00 我想以dd/MM/yy格式將其轉換為Date。 所以我期待代碼返回日期,如 - 2012年12月31日。

代碼 -

    // Input dateTime = 2012-12-31T13:32:56.483+13:00
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/MM/yy");
    Date date = simpleDateFormat.parse(dateTime.toString("dd/MM/yy"));

結果:

Output - Mon Dec 31 00:00:00 NZDT 2012
Expected Output - 31/12/12

當我執行以下操作時,我得到了預期的輸出,但我不知道如何將其轉換為Date-

String string = simpleDateFormat.format(date); 

請幫我。

謝謝

編輯 - 我希望我的最終結果是以dd / MM / yy格式的Util Date。 我不想要String輸出。 我的輸入是Joda DateTime yyyy-MM-ddThh:mm:ss:+ GMT。 我需要將JodaDateTime轉換為UtilDate。

正如我原先所說,Date對象沒有固有的格式。 java.util.Date包含一個毫秒時間值,表示日期和時間。 日期通過您選擇的DateFormat從字符串解析或格式化為字符串。

字符串可以按照規范進行格式化,但它們后面的Date對象始終是完全精確的,並且沒有任何固有的格式概念。


要將組合的“日期和時間” java.util.Date截斷為日期組件,請在午夜時將其有效地保留:

public static Date truncateTime (Date date) {
    Calendar cal = Calendar.getInstance();
    cal.setTime( date);
    cal.set( Calendar.HOUR_OF_DAY, 0);
    cal.set( Calendar.MINUTE, 0);
    cal.set( Calendar.SECOND, 0);
    cal.set( Calendar.MILLISECOND, 0);
    return cal.getTime();
}

如果你來自JodaTime DateTime ,你可以更容易地在JodaTime API中工作。

public static Date truncateJodaDT (DateTime dt) {
    java.util.Date result = dt.toDateMidnight().toDate();
    return result;
}

希望這可以幫助!

看到:


現在我再次不確定,你想要什么。 您現在想要字符串格式的日期嗎?

return simpleDateFormat.format( date);    // from java.util.Date

或者使用JodaTime:

return dateTime.toString( "dd/MM/yy");    // from org.joda.time.DateTime

這是你如何做到的

Format formatter = new SimpleDateFormat("dd/MM/yy");
String string = formatter.format(date);

TL;博士

OffsetDateTime.parse( "2012-12-31T13:32:56.483+13:00" ).toLocalDate()

Joda-Time由java.time取代

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

ISO 8601

您的輸入字符串采用標准ISO 8601格式。

默認情況下,java.time類使用標准格式,因此無需指定格式設置模式。

日期時間對象與字符串

正如接受的答案所解釋的那樣,您不應該將日期時間對象與可能在文本上表示其值的字符串混淆。 java.util.Date 對象沒有格式,因為它沒有文本 同樣適用於java.time類。 您可以使用java.time對象來解析字符串或生成字符串,但該對象是不同的並且與字符串分開。

OffsetDateTime

將輸入字符串解析為OffsetDateTime因為它包含與UTC的偏移量,但它缺少時區。

OffsetDateTime odt = OffsetDateTime.parse( "2012-12-31T13:32:56.483+13:00" );

LocalDate

如果您想要一個僅限日期的值,請使用LocalDate類。 請記住,對於任何給定的時刻,日期在全球范圍內按時區變化。 午夜過后一分鍾是在巴黎新的一天,而在魁北克蒙特利爾仍然是“昨天”。 如果您希望日期來自同一偏移量+13:00 ,則只需調用toLocalDate

LocalDate localDate = odt.toLocalDate();

問題說你不想要一個字符串,只需要一個日期對象。 你去吧 如果您以后想要一個字符串,請調用toString以生成標准ISO 8601格式的字符串, 2012-12-31 對於其他格式,請搜索DateTimeFormatter Stack Overflow。


關於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 ,和更多

使用Java 8提供的日期時間類

LocalDate parsedDate = LocalDate.parse(dateStr,DateTimeFormatter.ISO_ZONED_DATE_TIME);

暫無
暫無

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

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