2017-05-08 113 views
0

我正在使用Firebase並使用Android構建應用程序。將日期設置爲一週的第二天

我有一個DatePicker,在那裏我可以選擇星期幾,小時和分鐘。

當我選擇日期並按提交時,我想要存儲的不是當前日期,或者甚至沒有選擇日期,但是下一個日期與dayOfWeek選擇相關。

想象一下,我選擇星期四,明天是星期四,我想保存該日期和當前用戶選擇的小時。

在我想是這樣的時刻:

Calendar calendar = Calendar.getInstance(); 

calendar.set(Calendar.DATE, dayOfWeek); 
calendar.set(Calendar.HOUR_OF_DAY, hour); 
calendar.set(Calendar.MINUTE, minute); 
dateMatch = calendar.getTime(); 

小時和分鐘都很好,但我怎麼能存儲下一個日/月/年?

+0

使用''上對象Calendar' –

+0

add'方法,你可以添加7天的日曆中選定的日期,你會得到的星期幾下週 –

+0

我用添加日曆上的選擇,但我想要一週的第二天,它可以少於7天,例如今天是星期一,明天是星期二,如果我選擇星期二我想得到明天的日期,在我選擇星期二的第二天我得到第11天: S –

回答

0

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/MontrealAfrica/Casablanca,或Pacific/Auckland。切勿使用3-4字母縮寫,如ESTIST,因爲它們是而不是真正的時區,不是標準化的,甚至不是唯一的(!)。

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類?

+0

謝謝你的朋友,你知道一種方法來做到這一點與日曆? –

+0

@AntonioCosta **避免使用java.util.Calendar **。這個類的設計很糟糕,有缺陷並且令人困惑 - 一團糟。java.time類被開發來替代'Calendar','Date'等。查看我添加到我的答案中的最後一部分,瞭解如何在Android中使用java.time的後端端口。很值得添加到您的項目的麻煩。 –

相關問題