TL;博士
ZonedDateTime.of(
LocalDate.now(ZoneId.of("America/Montreal"))
.with(TemporalAdjusters.next(DayOfWeek.THURSDAY)) ,
LocalTime.of(hours , minutes) ,
ZoneId.of("America/Montreal")
).toString()
的ZonedDateTime
類,如果無效,在該區域該日期調整時間的一天。
java.time
現代的方法使用java.time類。避免在課題中看到麻煩的舊的遺留日期時間課程。
LocalDate
類代表沒有時間和不帶時區的僅有日期的值。
時區對確定日期至關重要。對於任何特定的時刻,日期因地區而異。例如,Paris France午夜後幾分鐘是新的一天,而在Montréal Québec仍然是「昨天」。
在continent/region
的格式指定一個proper time zone name,如America/Montreal
,Africa/Casablanca
,或Pacific/Auckland
。切勿使用3-4字母縮寫,如EST
或IST
,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(z);
確定DayOfWeek
由您的UI小部件表示的枚舉對象。如果按照編號進行跟蹤,那麼根據ISO 8601標準,該課程的編號爲1-7星期一至星期日。
DayOfWeek dow = DayOfWeek.of(1) ; // Monday=1.
使用TemporalAdjuster
發現TemporalAdjusters
確定一個日期與當天的星期 - 。
LocalDate ld = today.with(TemporalAdjusters.next(dow)) ;
從您的小時和分鐘數中實例化LocalTime
。
LocalTime lt = LocalTime.of(hours , minutes);
合併以確定時間軸中的實際時刻。
ZonedDateTime zdt = ZonedDateTime.of(ld , lt , z) ;
由於諸如夏令時(DST)之類的異常,您的特定時間可能無法在該地區的該日期有效。 ZonedDateTime
類根據需要進行調整。請務必閱讀課程文檔以瞭解其調整策略。
您可以使用標準ISO 8601格式將該對象序列化爲文本,並由該類擴展以將時區名稱添加到方括號中。
String output = zdt.toString() ;
通過解析這些字符串來重建對象。
ZonedDateTime zdt = ZonedDateTime.parse(input) ;
關於java.time
的java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
從何處獲取java.time類?
使用''上對象Calendar' –
add'方法,你可以添加7天的日曆中選定的日期,你會得到的星期幾下週 –
我用添加日曆上的選擇,但我想要一週的第二天,它可以少於7天,例如今天是星期一,明天是星期二,如果我選擇星期二我想得到明天的日期,在我選擇星期二的第二天我得到第11天: S –