2010-12-28 7 views
1

Jungs, ich durch den Aufruf der folgenden Methode bin verwirrt: Calendar.getInstance().get(Calendar.WEEK_OF_YEAR), das Ergebnis aus dieser Methode bekam, ist nicht right.Here mein Code:Wie bekomme ich die richtige Wochennummer über einen Kalender?

Locale.setDefault(Locale.CHINA); 
    Calendar calendar = Calendar.getInstance(); 
    //we think Monday is the first day of a week in China,but not Sunday. 
    calendar.setFirstDayOfWeek(Calendar.MONDAY); 
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); 
    String dateString = "2010-01-01"; 
    calendar.setTime(sdf.parse(dateString)); 
    System.out.println("DateString: " + dateString + ", week: " + calendar.get(Calendar.WEEK_OF_YEAR)); 
    dateString = "2010-12-27"; 
    calendar.setTime(sdf.parse(dateString)); 
    System.out.println("DateString: " + dateString + ", week: " + calendar.get(Calendar.WEEK_OF_YEAR)); 

Das Ergebnis ist

DateString: 2010-01-01, week: 1//This may be wrong? 
DateString: 2010-12-27, week: 1//This result is definitely wrong. 

hier So ist die Frage, wie man mit der Kalender-Instanz die richtige Jahreszahl erhält?

Antwort

1

Das Gebietsschema hat nur Einfluss auf die Formatierung (z. B. das Parsen und Formatieren des Datums als Chinesisch). Sie müssen die Zeitzone auf China einstellen. Befestigen Sie die Calendar#getInstance() Zeile wie folgt:

Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("CST")); // China Standard Time 
+0

viel dank @BalusC – George

+0

Um @BalusC ist CST Abkürzung für Central Standard Time, China Standard Time oder Kuba Standard Time. Um die China Standard Time (CST) zu nutzen, benötigen wir auch die Gebietsinformation. – George

+0

Es wird empfohlen, die langen Zeitzonennamen zu verwenden. In diesem Fall "Asien/Shanghai" – eckes

1

Try this:

Calendar calendar = Calendar.getInstance(); 
calendar.setMinimalDaysInFirstWeek(4); 
Verwandte Themen