0

次の文字列があります"29/05/201212:11PM"この値をDateFieldに追加したい

私はこのようにしました:

String dateTime = "29/05/2012 12:11 PM";
long initialDateTime = System.currentTimeMillis();
SimpleDateFormat SDF_DateTime = new SimpleDateFormat("dd/MM/yyyy hh:mm aa");
DateField DF_DateTime = new DateField("Time: ", initialDateTime , SDF_DateTime, Field.FIELD_LEFT | DrawStyle.LEFT | Field.FOCUSABLE);
DF_DateTime.setTimeZone(TimeZone.getDefault());
DF_DateTime.setDate(stringToDate(dateTime));
add(DF_DateTime);

どこ

public Date stringToDate(String s) 
{
    Calendar c = Calendar.getInstance(TimeZone.getDefault());
    c.set(Calendar.DAY_OF_MONTH, Integer.parseInt(s.substring(0, 2)));
    c.set(Calendar.MONTH, Integer.parseInt(s.substring(3, 5)) - 1);
    c.set(Calendar.YEAR, Integer.parseInt(s.substring(6, 10)));
    c.set(Calendar.HOUR, Integer.parseInt(s.substring(11, 13)));
    c.set(Calendar.MINUTE, Integer.parseInt(s.substring(14, 16)));
    c.set(Calendar.SECOND, 0);
    c.set(Calendar.AM_PM, s.substring(17, 19).toLowerCase().equals("am") ? Calendar.AM : Calendar.PM);
    return c.getTime();
}


ただし、フィールドには、「2012年5月29日午後12時11分」 ではなく「 2012年5月30日午前12時11分」と表示されます。

知っておくと便利な場合、私のデバイスは次のタイムゾーンのオプションに設定されています:「ダブリン、ロンドン(GMT)」

何が起こっているのかについて論理的な解釈はありますか?

4

1 に答える 1

0

私は解決策を見つけました、ここに興味がある人のためのものです:

c.set(Calendar.HOUR, Integer.parseInt(s.substring(11, 13)) % 12);

これは、javadocでCalendar.HOUR次のように指定されているためです。

HOURは、12時間制(0〜11)に使用されます。正午と真夜中は12ではなく0で表されます

于 2011-06-06T11:35:00.380 に答える