2016-04-26 9 views
0

今週の今週に基づいて計算が行われています。この現在の日付(4/26/2016)では、PythonとPHPの両方が今週をその年の第17週として返します。しかし、Javaは18を返します.JavaがPythonやPHPと同じように返すようにするにはどうすればよいですか?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 
+0

2016年4月26日*は*私のカウントから今年の18週である - 他のものはゼロベースされていますか? – stdunbar

+0

私はあなたが投稿したすべての言語で17を取得します。これらのコマンドをすべて同じマシンで実行していますか?また、どのタイムゾーンにいますか? – Chris

+0

@Chris、Python、phpは同じマシンにあります。 Javaコードは実際にはAndroidデバイスで実行されています。私はそのようなロケールを設定しようとしました:Calendar now = Calendar.getInstance(TimeZone.getTimeZone( "America/Los_Angeles"));それでも18を得る。 – pnus

答えて

-1

8601最初の週ISOを実装するために(Pythonのisocalendarは、それを使用しています)、あなたは4に最初の週の最小日数を設定し、(週のISO最初の日である)月曜日に週の最初の日にする必要があります。 これは、最初の週のiso定義を満たすのに十分です。

今年の最初の木曜日がある週です。

だから、あなたがしなければならないすべては、次のとおりです。

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

Javaの 'minimalDaysInFirstWeek'はデフォルトで4です。 – Chris

+0

ドキュメントによれば、ロケール固有です。明示的に設定しないと、私は1ではなく4になります。 – AniaG

+0

本当にあなたは正しいです。デフォルトを設定する厄介なリソースファイルからは、デフォルトでは英国では4、米国では1のように見えます。 – Chris

関連する問題