簡體   English   中英

如何在Java中設置日期的最小小時數?

[英]How Can I Set Miniumum Hour for Date in Java?

我正在嘗試獲取上個月第一天的日期和時間; 尤其是1月,我正嘗試獲取: Sun Dec 01 00:00:00 EST 2013 我在研究此主題時使用的是下面的代碼段,這些代碼段是我在Stackoverflow上的另一個代碼段中修改的; 該代碼段將返回: Sun Dec 01 12:00:00 EST 2013 我不明白為什么設置第一時間的最低時數實際上會返回中午。

Calendar aCalendar = Calendar.getInstance();
// add -1 month to current month
aCalendar.add(Calendar.MONTH, -1);
// set DATE to 1, so first date of previous month
//aCalendar.set(Calendar.DATE, 1);                        
aCalendar.set(Calendar.DATE, aCalendar.getActualMinimum(Calendar.DAY_OF_MONTH));
aCalendar.set(Calendar.HOUR, aCalendar.getActualMinimum(Calendar.HOUR));
aCalendar.set(Calendar.MINUTE, aCalendar.getActualMinimum(Calendar.MINUTE));
aCalendar.set(Calendar.SECOND, aCalendar.getActualMinimum(Calendar.SECOND));
Date firstDateOfPreviousMonth = aCalendar.getTime();

如果我如圖所示修改以下行並將其設置為0,則得到相同的結果:

aCalendar.set(Calendar.HOUR, 0);

如果按如下所示進行修改,則會得到1pm:

aCalendar.set(Calendar.HOUR, 0);

結果: Sun Dec 01 13:00:00 EST 2013

從Java文檔

HOUR get和set的字段編號,指示上午或下午的時間。

您將改為使用HOUR_OF_DAY

HOUR_OF_DAY get和set的字段號,指示一天中的小時。

或相應地設置AM_PM ...

AM_PM用於獲取和設置的字段號,指示HOUR是在中午之前還是之后。

無論如何,請花一些時間查閱Java文檔

一些使用Joda-Time 2.3的示例代碼。

使用默認時區,我們創建一個現在(當前時刻)的DateTime實例,返回上個月(以一種聰明的方式,補償像2月這樣的短月份),通過詢問“最小值”來獲得該月的第一天,並且然后獲得該月第一天的第一刻。

org.joda.time.DateTime startOfPreviousMonth = new org.joda.time.DateTime().minusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();

請注意withTimeAtStartOfDay方法來獲取一天的第一時刻。 該時間可能是當地時間的00:00:00,也可能不是00:00:00(由於夏令時或其他異常)。

使用明確的時區(幾乎總是更好的做法)…

DateTimeZone timeZone = DateTimeZone.forId( "Europe/Paris" ); // "Asia/Kolkata" etc.
org.joda.time.DateTime startOfPreviousMonth = new org.joda.time.DateTime( timeZone ).minusMonths(1).dayOfMonth().withMinimumValue().withTimeAtStartOfDay();

得到一個字符串...

String string = startOfPreviousMonth; // or startOfPreviousMonth.toString();

要轉換回java.util.Date實例以與其他庫進行通信……

java.util.Date date = startOfPreviousMonth.toDate();

暫無
暫無

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

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