Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java的周数不同于Python和PHP_Java_Php_Python - Fatal编程技术网

Java的周数不同于Python和PHP

Java的周数不同于Python和PHP,java,php,python,Java,Php,Python,我根据一年中当前的一周做了一些计算。在当前日期2016年4月26日,Python和PHP都将当前一周返回为一年中的第17周。然而,Java返回18。如何确保Java返回与Python和php相同的结果 // Java Calendar now = Calendar.getInstance(); now.get(Calendar.WEEK_OF_YEAR); // Returns 18 // Python datetime.datetime.now().isocalendar()[1] //

我根据一年中当前的一周做了一些计算。在当前日期2016年4月26日,Python和PHP都将当前一周返回为一年中的第17周。然而,Java返回18。如何确保Java返回与Python和php相同的结果

// Java
Calendar now = Calendar.getInstance();
now.get(Calendar.WEEK_OF_YEAR); // Returns 18

 // Python
 datetime.datetime.now().isocalendar()[1] // Returns 17

// php

$current_date = new DateTime('now');
$current_date->format("W") // Returns 17

要实现ISO 8601第一周Python的isocalendar使用它,您需要将第一周的最小天数设置为4,将每周的第一天设置为星期一,即ISO每周的第一天。 这足以满足iso对第一周的定义,如下所示

一年中第一个星期四所在的一周

所以你所要做的就是:

Calendar now = Calendar.getInstance();
now.setFirstDayOfWeek(Calendar.MONDAY);
now.setMinimalDaysInFirstWeek(4); 
now.get(Calendar.WEEK_OF_YEAR);// Returns 17

2016年4月26日是我统计的一年中的第18周-其他的是零基的吗?你发布的所有语言我都有17种。您是否在同一台机器上运行所有这些命令?还有,你在哪个时区?@Chris,Python和php在同一台机器上。Java代码实际上正在我的Android设备上运行。我尝试将区域设置为:Calendar now=Calendar.getInstanceTimeZone.getTimeZoneAmerica/Los_Angeles;但仍然有18天。@stdunbar ISO周有点奇怪,因为今年是从周五开始的。一年的第一周被认为是第一个星期四所在的一周,因此这是ISO年的第17周,因为一年的前3天被认为是2015年的最后一周。您可以在这里找到答案:Java中,第一周的最小天数默认为4。根据文档,这是特定于区域设置的。如果不明确设置,我得到的是1,而不是4。事实上,你是对的。从设置默认值的讨厌的资源文件来看,英国的默认值可能是4,而美国的默认值可能是1。