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 –