有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java将日期设置为每周的第二天

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

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

选择日期并按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) 个答案

  1. # 1 楼答案

    tl;博士

    ZonedDateTime.of(
        LocalDate.now( ZoneId.of( "America/Montreal" ) )
                 .with( TemporalAdjusters.next( DayOfWeek.THURSDAY ) ) ,
        LocalTime.of( hours , minutes ) ,
        ZoneId.of( "America/Montreal" )
    ).toString()
    

    ^{}类在该区域中调整一天中的时间(如果对该日期无效)

    爪哇。时间

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

    ^{}类表示一个只包含日期的值,不包含一天中的时间和时区

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

    continent/region的格式指定一个proper time zone name,例如^{}^{}Pacific/Auckland。切勿使用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.
    

    使用TemporalAdjusters中的TemporalAdjuster确定一周中同一天的下一个日期

    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。时间

    java.time框架内置于Java8和更高版本中。这些类取代了麻烦的旧legacy日期时间类,如^{}^{}、&^{}

    现在位于maintenance modeJoda-Time项目建议迁移到java.time

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

    在哪里可以获得java。时间课