2016-07-07 154 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)}; 
} 
相关问题