Java 8 使用DateTimeFormatter YYYY-w返回的不同周号&;按日期TimeFormatter.ISO\u周\u日期Java8

Java 8 使用DateTimeFormatter YYYY-w返回的不同周号&;按日期TimeFormatter.ISO\u周\u日期Java8,java-8,week-number,dateformatter,Java 8,Week Number,Dateformatter,我试图从示例毫秒值1451646394000格式化毫秒日期,以获取周数 以下是代码片段: import java.time.Instant; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.chrono.IsoChronology; import java.time.format.DateTimeFormatter; public class Test1 { public static

我试图从示例毫秒值1451646394000格式化毫秒日期,以获取周数

以下是代码片段:

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;

public class Test1 {
    public static void main(String[] args) {

        final String dateFormat = "YYYY-w";
        ZoneId zoneId_UTC = ZoneId.of("UTC");
        final long indexTimeStampMillis = 1463510726000L;
        LocalDateTime dateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(indexTimeStampMillis), zoneId_UTC);

        // Case 1:
        final DateTimeFormatter weekFormatter = DateTimeFormatter.ISO_WEEK_DATE;
        String output1 = dateTime.format(weekFormatter);
        System.out.println("Correct output of week number according to ISO Week numbers" + output1);

        // Case 2:
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(dateFormat).withZone(zoneId_UTC)
                .withChronology(IsoChronology.INSTANCE);
        String output = dateTime.format(formatter);
        System.out.println("Week number I am getting in output " + output);

    }

}
控制台上的输出:

根据ISO周数2016-W20-2正确输出周数

2016-21年我获得的周数

注意
根据ISO 8601,上述日期的正确周数为20。以毫秒为单位的日期转换为2016年5月17日星期二18:45:26 GMT。

。。。你的代码太偏袒了。。在那种情况下解决任何问题都很困难谢谢!编辑了上面的问题,提供了完整的代码片段。太棒了!现在我理解了你们的代码——我确实认为这一转变取决于周减速——你们的一周是从周日还是周一开始的?根据ISO 8601,周数从周一开始,你们不会都给出周数吗?如果1月1日是星期一,那么第1周将从1月1日开始,如果1月1日是星期二,那么第1周将从上一标准年的12月31日开始?显然,如果您将周日(
-e
)添加到
日期格式
模式中,它将返回与ISO的
2
相比的周日是
3
。所以这是一周中的一天,我的假设是,由于这些结果依赖于区域设置,您需要在两种模式中将两个区域设置固定为相同的值,以使其按预期工作。。。除了我在小提琴上试过,什么都没变。