3

を に変換してDateからStringに戻そうとしていDateます。しかし、最終日が元の日付と異なることがわかりました。

    //1975-06-20
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, 1975);
    cal.set(Calendar.MONTH, 5);
    cal.set(Calendar.DAY_OF_MONTH, 20);
    cal.set(Calendar.HOUR, 0);
    cal.set(Calendar.MINUTE, 0);
    cal.set(Calendar.SECOND, 0);
    System.out.println(cal);

    Date originalDate = cal.getTime();
    System.out.println("Date 1: " + originalDate.toString());

    SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
    Date date = sdf.parse(originalDate.toString());
    System.out.println("Date 2: " + date.toString());

上記のコードからの出力は次のとおりです。

cal: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Singapore",offset=28800000,dstSavings=0,useDaylight=false,transitions=9,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1975,MONTH=5,WEEK_OF_YEAR=26,WEEK_OF_MONTH=5,DAY_OF_MONTH=20,DAY_OF_YEAR=179,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=0,HOUR_OF_DAY=16,MINUTE=0,SECOND=0,MILLISECOND=333,ZONE_OFFSET=28800000,DST_OFFSET=0]
Date 1: Fri Jun 20 12:00:00 SGT 1975
Date 2: Fri Jun 20 11:30:00 SGT 1975
4

2 に答える 2

13

おそらく1982年にシンガポールでタイムゾーンが変更されたため(+30分)。

http://www.timeanddate.com/worldclock/timezone.html?n=236&syear=1980

SimpleDateFormat は、日付を解析するときに SGT を UTC+8 として取得し、1982 年より前の SGT である UTC+7.5 に変換します。したがって、日付は 30 分ずれています。

于 2012-06-27T07:58:32.780 に答える
0

コードを正しく貼り付けましたか?

日付 date = DateFormat.format(originalDate.toString(), "EEE MMM dd HH:mm:ss zzz yyyy");

問題があるようです:私が知る限り、シグネチャ DateFormat.format(String, String) を持つメソッドはありません

于 2012-06-27T08:11:58.360 に答える