2016-07-07 115 views
1

我需要將當前時間設爲HH:mm。所以我寫了這個方法從當前日期起小時和分鐘:Codename One Date在iOS和Android上給出了不同的結果

final public static String[] getArrayOfCurrentTime(){ 

    Dialog.show("", "La date est " + (new Date()).toString(), "OK", null); 
    // Android : La date est Thu Jul 07 17:00:34 CEST 2016 
    // iOS : La date est 7 Juillet 2016 

    String time = Util.split((new Date()).toString(), " ")[3]; 
    String hour = Util.split(time, ":")[0]; 
    String min = Util.split(time, ":")[1]; 
    String sec = Util.split(time, ":")[2]; 

    return new String []{hour, min, sec}; 
} 

看來,Android爲日期時間,而iOS的給出了一個日期。

因此在iOS上我得到和數組索引超出界限。我無法在文檔中找到有關Date和iOS之間的行爲差​​異的任何內容。我是否必須從時代開始的毫秒計算結果,或者我錯過了什麼?

+0

我對Codename One完全一無所知。我甚至不知道它是什麼。不過,我知道很多關於iOS開發的知識。在iOS中,如果您僅使用日期的字符串屬性,則會以UTC格式獲取固定格式的日期和時間字符串。如果你想要一個特定格式的日期或時間字符串,你應該使用'NSDateFormatter'對象。因爲我對Codename One一無所知,所以我不知道你會怎麼做,但它至少可以幫助你搜索。 –

+0

感謝Duncan C.但是,我儘可能地嘗試避免使用本機代碼(請參閱Codename一個座右銘是[一次寫入] [在java中運行])! – HelloWorld

回答

1
+0

謝謝陳!我沒有時間去測試它,但是如果Date()僅在iOS上運行時輸出日期(DD MM YYYY),那麼在該平臺上將不會有任何時間(HH:mm)解析, ? – HelloWorld

+1

日期包括所有東西,依靠'toString()'行爲是片狀的。我個人會使用L10NManager格式化日期。 –

+0

謝謝@Shai。 'l10n.formatDateTime(new Date()))'根據[CN1文檔](https://www.codenameone.com/javadoc/com/codename1/l10n/L10NManager.html)看起來確實是這樣。比我的答案簡單得多!如果它按預期工作,我會盡快嘗試並改變接受的答案。 – HelloWorld

1

爲了保持它的便攜(iOS和Android),避免寫我只能用代號一個方法中的計算自己的本機代碼,如下圖所示:

final public static String[] getArrayOfCurrentTime(){ 
    Calendar cal = new Calendar(); // current Date and time 
    long today = cal.getCurrentDate().getTime(); // only the date 
    long now = System.currentTimeMillis(); // only time 
    long minutesInDay = (now - today)/(60 * 1000); // number of minutes between midnight and now 

    int nowHours = (int) (minutesInDay/60); 
    int nowMinutes = (int) ((minutesInDay/60) % 60); 

    Dialog.show("", "L'heure est " + nowHours + ":" + nowMinutes, "OK", null); 
// (Android and iOS) L'heure est 18:10 

    return new String []{Integer.toString(nowHours), Integer.toString(nowMinutes)}; 
} 
相關問題