codenameone将时间转换为utc

时间:2016-09-07 03:52:58

标签: java codenameone

我正在研究一个项目的代号,我正在努力将设备时间转换为UTC。 我使用这段代码:

Calendar cal = Calendar.getInstance();
System.out.println(cal.getTimeZone());
TimeZone tzUTC = TimeZone.getTimeZone("UTC");
com.codename1.l10n.DateFormat dtfmt = new com.codename1.l10n.SimpleDateFormat("EEE, yyyy-MM-dd KK:mm a z");
dtfmt.setTimeZone(tzUTC);
System.out.println("UTC: " + dtfmt.format(cal.getTime()));

并且代号为1拒绝setTImeZone方法。

我使用java.text.DateFormat但是当我运行它时,压缩一个也无法编译它。

3 个答案:

答案 0 :(得分:1)

它可能无法真正回答您的真实问题,但以下内容适用于我:

    Calendar cal = Calendar.getInstance();
    DateFormat df = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.LONG);
    TimeZone tzUtc = TimeZone.getTimeZone("UTC");
    df.setTimeZone(tzUtc);
    System.out.println("UTC: " + df.format(cal.getTime()));

我不知道com.codename1.l10n.DateFormat,所以我很抱歉我无法帮助你。

答案 1 :(得分:0)

使用:

    java.util.Calendar cal = java.util.Calendar.getInstance();
    TimeZone tz = cal.getTimeZone();
    cal.setTime(new Date(System.currentTimeMillis() - tz.getRawOffset()));
    com.codename1.l10n.DateFormat dtfmt = new com.codename1.l10n.SimpleDateFormat("EEE, yyyy-MM-dd KK:mm a");
    System.out.println("UTC: " + dtfmt.format(cal.getTime()));

然后将UTC附加到字符串,因为值始终为UTC。

答案 2 :(得分:0)

正在使用 Shai 的解决方案,但注意到当设备时区处于夏令时时,它没有给出正确的 UTC 时间。下面是使用 tz.getOffset() 而不是 tz.getRawOffset() 的更通用的解决方案。似乎应该有更简单的方法!

        L10NManager l10n = L10NManager.getInstance();
        long sysRtnTime = System.currentTimeMillis() / 1000L;
        Date errorDate = new Date(sysRtnTime * 1000L);
        Date currentDate = new Date();
        String deviceTime = l10n.formatDateTime(errorDate);
        Calendar c = Calendar.getInstance();
        long unixtime = errorDate.getTime();
        TimeZone tz = c.getTimeZone();
        // to get offset, we need era, year, month, day, dayOfWeek,millis
        SimpleDateFormat yearFormat = new SimpleDateFormat("yyyy");
        SimpleDateFormat monthDateFormat = new SimpleDateFormat("MM");
        SimpleDateFormat dayDateFormat = new SimpleDateFormat("dd");
        SimpleDateFormat dayOfWeekDateFormat = new SimpleDateFormat("F");
        SimpleDateFormat millisDateFormat = new SimpleDateFormat("S");
        int year = Integer.parseInt(yearFormat.format(currentDate));
        int month = Integer.parseInt(monthDateFormat.format(currentDate));
        int day = Integer.parseInt(dayDateFormat.format(currentDate));
        int dayOfWeek = Integer.parseInt(dayOfWeekDateFormat.format(currentDate));
        int millis = Integer.parseInt(millisDateFormat.format(currentDate));
//            c.setTime(new Date(unixtime - tz.getRawOffset()));    // c in UTC only if device not DST           
        c.setTime(new Date(unixtime - tz.getOffset(1, year, month, day, dayOfWeek, millis)));    // c in UTC (even if device in DST)
        Date cDateUTC = c.getTime();                          // sDate in UTC
        String timeInUTC = serverDateFormat.format(cDateUTC);
        Log.p("Time (in device timezone): " + deviceTime);
        Log.p("Time (in UTC): " + timeInUTC);