【问题标题】:Year-Week-Day in java.time?java.time 中的年-周-日?
【发布时间】:2016-09-19 23:07:22
【问题描述】:

java.time 类或其扩展 ThreeTen-Extra 是否支持 week dates,特别是年-周-日,例如 2009-W53-7,即 2010 年 1 月 3 日星期日.

至于年周没有星期几:

但是如何也表示星期几?

【问题讨论】:

    标签: java-time iso8601 week-number


    【解决方案1】:

    查看IsoFields 类,它允许查询基于周的年份和基于周的年份中的哪一周。还有一个专用的格式化程序ISO_WEEK_DATE

    DayOfWeek 枚举告诉你星期几,周一到周日是 1-7。拨打LocalDate::getDayOfWeek,然后拨打DayOfWeek::getValue

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

    2016-12-07

    int weekOfWeekBasedYear = ld.get( IsoFields.WEEK_OF_WEEK_BASED_YEAR ) ;
    int yearOfWeekBasedYear = ld.get( IsoFields.WEEK_BASED_YEAR ) ;
    int dayOfWeek = ld.getDayOfWeek().getValue();
    

    使用这些部分在标准ISO 8601 week date formats 中构建字符串。

    String yearWeek = yearOfWeekBasedYear + "-W" + String.format( "%02d", weekOfWeekBasedYear ) ; 
    

    2016-W49

    String yearWeekDay = yearWeek + "-" + dayOfWeek ;
    

    2016-W49-3

    或者,让预定义的DateTimeFormatter.ISO_WEEK_DATE 完成这项工作。

    String ywd = ld.format( DateTimeFormatter.ISO_WEEK_DATE );
    

    2016-W49-3

    同样的格式化程序可以解析这样的标准字符串。

    String input = "2016-W49-3" ;
    LocalDate ldParsed = LocalDate.parse( input , DateTimeFormatter.ISO_WEEK_DATE ) ;
    

    2016-12-07

    【讨论】:

    • 谢谢,但我问的是代表一年中的星期几,7 in 2009-W53-7。综合考虑,这表示一天中的日期。
    • 星期几只是getDayOfWeek().getValue()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多