2011-05-29 60 views
0

我有以下字符串「29/05/2012下午12時11」 我想將此值添加到一個DateField如何使用包含日期和時間的字符串設置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(); 
} 


但字段表示: 「/05/2012 12:11 AM
我的nstead 「/05/2012 12:11 PM

如果它是有用的知道,我的設備是在選項設置爲以下時區: 「都柏林,倫敦(GMT)」

有什麼邏輯解釋發生了什麼?

回答

0

我已經找到了解決辦法,在這裏它是爲那些有興趣誰:

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

因爲在Javadoc中Calendar.HOUR它明確指出:

HOUR用於12小時鐘(0 - 11)。中午和午夜由0表示,而不是由12表示

相關問題