簡體   English   中英

如何在java中設置日期對象的時間

[英]How to set time to a date object in java

我用Java創建了一個Date對象。 當我這樣做時,它顯示如下: date=Tue Aug 09 00:00:00 IST 2011 結果,似乎我的Excel文件減少了一天(27 feb變為26 feb,依此類推)我認為一定是因為時間。 我怎樣才能把它設置為下午5:30?

Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY,17);
cal.set(Calendar.MINUTE,30);
cal.set(Calendar.SECOND,0);
cal.set(Calendar.MILLISECOND,0);

Date d = cal.getTime();

另見

你能展示用於設置日期對象的代碼嗎? 無論如何<您可以使用此代碼初始化日期:

new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").parse("2011-01-01 00:00:00")

我想提出現代的答案。 這涉及使用java.time ,現代Java日期和時間API,而不是舊的DateCalendar除非無法避免它。

您的問題很可能是一個時區問題。 如果是IST 2011年8月9日00:00:00,那么在IST午夜以西的時區尚未到達。 它仍然是8月8日。例如,如果您將日期放入Excel的API需要UTC,則日期將是您預期的日期。 我相信真正好的解決方案是生成00:00 UTC的日期時間(或者預期在另一端使用的任何時區或偏移)。

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    ZonedDateTime utcDateDime = yourDate.atStartOfDay(ZoneOffset.UTC);
    System.out.println(utcDateDime);

這打印

2018-02-27T00:00Z

Z表示UTC(將其視為UTC或祖魯時區的偏移零)。 當然,更好的是,如果您可以將LocalDate從第一個代碼行傳遞到Excel。 它不包括時間,因此不存在混淆。 另一方面,如果您需要一個老式的Date對象,請在處理Date之前進行轉換:

    Date oldfashionedDate = Date.from(utcDateDime.toInstant());
    System.out.println(oldfashionedDate);

在我的電腦上打印

Tue Feb 27 01:00:00 CET 2018

不要被愚弄,這是正確的。 我的時區(中歐時間)與2月份的UTC(標准時間)相差+01:00,因此這里的01:00:00等於00:00:00 UTC。 只是Date.toString()抓住JVM時區並使用它來生成字符串。

我怎樣才能把它設置為下午5:30?

要直接回答您的直接問題,如果您有ZonedDateTimeOffsetDateTimeLocalDateTime ,在所有這些情況下,以下內容將完成您的要求:

    yourDateTime = yourDateTime.with(LocalTime.of(17, 30));

如果yourDateTimeyourDateTime 2018-02-27T00:00LocalDateTime ,現在將是2018-02-27T17:30 類似地,對於其他類型,僅適當地包括偏移和時區。

如果您只有一個日期,就像上面的第一個代碼段一樣,您還可以向其添加時間信息:

    LocalDate yourDate = LocalDate.of(2018, Month.FEBRUARY, 27);
    LocalDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30));

例如,在大多數情況下,您應該更喜歡在特定時區添加時間

    ZonedDateTime dateTime = yourDate.atTime(LocalTime.of(17, 30))
            .atZone(ZoneId.of("Asia/Kolkata"));

這將產生2018-02-27T17:30+05:30[Asia/Kolkata]

DateCalendarjava.time

您使用的Date類以及在其他答案中使用的CalendarSimpleDateFormat都已過時,特別是SimpleDateFormat已證明很麻煩。 在所有情況下,現代Java日期和時間API都可以更好地使用。 這就是為什么我想為仍在訪問的舊問題提供這個答案的原因。

鏈接: Oracle Tutorial Date Time ,解釋如何使用java.time

暫無
暫無

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

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