当前位置: 首页 > 知识库问答 >
问题:

将“日期”设置为一周中的第二天

汲昊空
2023-03-14

我正在使用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();

小时和分钟很好,但是我如何存储第二天/月/年?

共有1个答案

狄鸿禧
2023-03-14
ZonedDateTime.of(
    LocalDate.now( ZoneId.of( "America/Montreal" ) )
             .with( TemporalAdjusters.next( DayOfWeek.THURSDAY ) ) ,
    LocalTime.of( hours , minutes ) ,
    ZoneId.of( "America/Montreal" )
).toString()

< code>ZonedDateTime类调整日期时间(如果对于该区域中的日期无效)。

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

LocalDate类表示一个只包含日期的值,不包含时间和时区。

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在巴黎,午夜后几分钟,法国是新的一天,而在蒙特利尔魁北克,这仍然是“昨天”。

大陆/地区的格式指定适当的时区名称,例如美国/蒙特利尔非洲/卡萨布兰卡太平洋/奥克兰。切勿使用3-4个字母的缩写,例如ESTIST,因为它们不是真正的时区,没有标准化,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );

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

DayOfWeek dow = DayOfWeek.of( 1 ) ;  // Monday=1.

使用< code>TemporalAdjuster中的< code > temporal adjuster 来确定下一个星期几。

LocalDate ld = today.with( TemporalAdjusters.next( dow ) ) ;

从您的小时和分钟数中实例化一个< code>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 8和更高版本中。这些类取代了麻烦的旧式日期-时间类,如< code>java.util.Date、< code>Calendar,

现在处于维护模式的JodaTime项目建议迁移到java。时间课程。

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

java.time课在哪里获取?

  • Java SE 8、Java SE 9及更高版本
    • 内置
    • 标准Java API的一部分,带有捆绑实现
    • Java9添加了一些小特性和修复
    • 许多java.time功能都向后移植到Java 6。
    • ThreeTenABP项目专门为Android改编了ThreeTen-Backport(如上所述)。
    • 了解如何使用ThreeTenABP。

 类似资料:
  • 问题内容: 我想找到星期一,星期二,星期三等的日期戳。如果这个星期还未到这一天,我希望该日期为本周,否则为下周。谢谢! 问题答案: 看到 通过查看星期数,您可能会发现自己是否已经过了这一天:

  • 我正在尝试为我们的财务部门生成一些代码,他们需要一个字段,该字段将为他们提供一年中的当前一周,但以星期天为基础,这是一周的第一天。例如01-25-16(MM dd yyyy)将是第4周。然而,当我尝试使用和

  • 问题内容: 只要您所在国家/地区的一周中的第一天是星期日,PHP(5.3+)中的DateTime类就可以很好地工作。在荷兰,每周的第一天是星期一,这使得该班级无法用周视图和计算来构建日历。 我似乎找不到关于Stackoverflow或Internet其余部分的答案,如何让DateTime像一周的第一天是星期一那样工作。 我在Stackoverflow上找到了这篇文章,但是它并不能解决您遇到的所有麻

  • 问题内容: 假设我有2011年1月3日,我想在一周的第一天,也就是星期天,那是2011年1月2日,我该怎么做? 原因是我有此查询: 是的,我意识到起源拼写错误,但是在此之前我就在这里,因此由于太多内部应用程序引用了它,因此我无法对其进行更正。 因此,我按周分组,但我希望以此填充我的图表,所以我不能让所有的周初看起来都像不同的日期。我该如何解决? 问题答案: 如果您需要处理从星期一开始的几周,也可以

  • 如何将一周的第一天设置为周一或周六? 我找不到方法或变量来更改它。如下图所示,一周的第一天是星期一。提前谢谢。 链接github DateRangePickerhttps://github.com/savvisingh/DateRangePicker 谢谢你的答案。我终于明白了。您需要初始化区域设置和时区以更改一周的第一天。不是您必须更改的日历。也不需要破坏库代码。

  • 基本上,我正在尝试从一个设定的日期创建一个包含一周所有日期的列表,并将其存储在数组中。但我有点麻烦。 基本上,今天是2016年3月9日,所以在数组中,我想存储: 这是我的代码: 如果有人能帮我就好了