Java 将日期设置为每周的下一天

Java 将日期设置为每周的下一天,java,android,date,Java,Android,Date,我正在使用firebase并使用Android构建一个应用程序 我有一个日期选择器,在那里我可以选择一周中的哪一天、每小时和每分钟 选择日期并按submit时,我希望存储的不是当前日期,甚至不是所选日期,而是与所选星期日相关的下一个日期 假设我选择星期四,明天是星期四,我想保存当前用户选择的日期和时间 当时我试过这样的方法: Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DATE, dayOfWeek); c

我正在使用firebase并使用Android构建一个应用程序

我有一个
日期选择器
,在那里我可以选择一周中的哪一天、每小时和每分钟

选择日期并按submit时,我希望存储的不是当前日期,甚至不是所选日期,而是与所选星期日相关的下一个日期

假设我选择星期四,明天是星期四,我想保存当前用户选择的日期和时间

当时我试过这样的方法:

Calendar calendar = Calendar.getInstance();

calendar.set(Calendar.DATE, dayOfWeek);
calendar.set(Calendar.HOUR_OF_DAY, hour);
calendar.set(Calendar.MINUTE, minute);
dateMatch = calendar.getTime();
小时和分钟都很好,但如何存储下一天/月/年?

tl;博士 如果对该区域中的日期无效,则该类将调整一天中的时间

java.time 现代方法使用java.time类。避免问题中出现的麻烦的旧遗留日期时间类

该类表示一个仅限日期的值,不包含一天中的时间和时区

时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,中午夜后几分钟是新的一天,而中仍然是“昨天”

大陆/地区
的格式指定,例如,或
太平洋/奥克兰
。切勿使用3-4个字母的缩写,如
EST
IST
,因为它们不是真正的时区,也不是标准化的,甚至不是唯一的(!)

确定UI小部件表示的
DayOfWeek
enum对象。如果按编号进行跟踪,则根据ISO 8601标准,周一至周日的课程编号为1-7

DayOfWeek dow = DayOfWeek.of( 1 ) ;  // Monday=1.
使用
temporaladjusts
中的
temporaladjusts
确定一周中同一天的下一个日期

LocalDate ld = today.with( TemporalAdjusters.next( dow ) ) ;
从小时和分钟数中实例化一个
LocalTime

LocalTime lt = LocalTime.of( hours , minutes );
组合以确定时间轴中的实际时刻

ZonedDateTime zdt = ZonedDateTime.of( ld , lt , z ) ;
由于夏令时(DST)等异常情况,您一天中的特定时间可能在该区域的该日期无效。
ZoneDateTime
类会根据需要进行调整。请务必阅读班级文档,以了解其在进行调整时的政策

您可以使用标准格式将该对象序列化为文本,该标准格式由此类扩展以在方括号中附加时区名称

String output = zdt.toString() ;
通过解析这些字符串来重新构造对象

ZonedDateTime zdt = ZonedDateTime.parse( input ) ;

关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,&

该项目现已启动,建议迁移到类

要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是

从哪里获得java.time类

  • ,及以后
    • 内置的
    • 标准JavaAPI的一部分,带有捆绑实现
    • Java9添加了一些次要功能和修复
    • 大部分java.time功能都在中向后移植到Java6和Java7
    • 该项目专门为Android采用了ThreeTen Backport(如上所述)

使用
add
方法在
Calendar
object您可以在日历中的选定日期中添加7天,您将在下一周中选择dayofweek。我使用添加在日历中,但我想要一周的下一天,它可以少于7天,例如今天是星期一,明天是星期二,如果我选择星期二,我想知道明天的日期,在我选择星期二的那一刻,我就得到了第11天:谢谢你的朋友,你知道如何使用日历吗?@antoniocata避免使用
java.util.calendar
。该类设计拙劣、有缺陷且令人困惑,简直是一团糟。java.time类的开发是为了取代
日历
日期
,等等。关于在Android中使用java.time的后端口,请参阅我在回答中添加的部分的最后一部分。很值得为你的项目添加麻烦。
String output = zdt.toString() ;
ZonedDateTime zdt = ZonedDateTime.parse( input ) ;