【问题标题】:Two different format when using same java classes in java application and android application在 java 应用程序和 android 应用程序中使用相同的 java 类时的两种不同格式
【发布时间】:2014-07-18 12:05:34
【问题描述】:

我在 java 应用程序和一个 android 应用程序中使用相同的方法生成日期和时间,但我惊讶地发现由相同函数产生的输出不同,我很好奇为什么当我们使用两种方法时会发生这种情况不同的平台,谁能解释一下。

这是输出

Java application output ---Fri Jul 18 12:51:17 IST 2014
Android application output----Thu Jul 17 18:46:05 GMT+05:30 2014

这是返回日期的代码[用于相同应用程序的相同代码]

private Date offsetTimeZone(Date date, String fromTZ, String toTZ) {

        // Construct FROM and TO TimeZone instances
        TimeZone fromTimeZone = TimeZone.getTimeZone(fromTZ);
        TimeZone toTimeZone = TimeZone.getTimeZone(toTZ);
        System.out.println("timezone:" + fromTimeZone);
        // Get a Calendar instance using the default time zone and locale.
        Calendar calendar = Calendar.getInstance();

        // Set the calendar's time with the given date
        calendar.setTimeZone(fromTimeZone);
        calendar.setTime(date);

        System.out.println("Input: " + calendar.getTime() + " in "
                + fromTimeZone.getDisplayName());



        // UTC to TO TimeZone
        calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());

        if (toTimeZone.inDaylightTime(calendar.getTime())) {
            calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
        }

        return calendar.getTime();

    }

从安卓应用调用方法

 Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                            Locale.ENGLISH).parse(_data.get(position).get_date());
                    date2 = offsetTimeZone(date, "UTC", timezoneID);

从java应用程序调用方法

try {
            String timezoneID = TimeZone.getDefault().getID();
            System.out.println("idd:" + timezoneID);
            Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                    Locale.ENGLISH).parse("2014-07-18 07:21:17");
            Date date2 = offsetTimeZone(date, "UTC", timezoneID);
            System.out.println("output" + date2.toString());
        } catch (ParseException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

【问题讨论】:

  • 看起来像是不同的时区。每种情况下 timezoneID 的值是多少?
  • 均返回亚洲/加尔各答时区
  • 您是否尝试过在 android 代码中将 _data.get(position).get_date() 替换为“2014-07-18 07:21:17”?即 get_date() 是否返回“2014-07-18 07:21:17”?
  • 是的,我试过了,但答案还是一样

标签: java android datetime time


【解决方案1】:

这不是一个完整的答案,但有助于缩小范围......

这准确地记录了您应该期望的格式:

http://docs.oracle.com/javase/6/docs/api/java/util/Date.html#toString%28%29

http://developer.android.com/reference/java/util/Date.html#toString%28%29

Android 和常规 Java 都使用相同的输出格式。

由于某种原因,zzz 在一个示例中显示为 GMT+05:30,而在另一个示例中则显示为 IST。

时区命名数据库可能在一种情况下不知道 IST 的名称,而是显示了时区偏移量。常规 Java 的 Javadoc 虽然说 “如果时区信息不可用,则 zzz 为空 - 也就是说,它根本不包含任何字符。” 这表明其他情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    • 2022-10-07
    • 1970-01-01
    • 2014-05-16
    • 1970-01-01
    相关资源
    最近更新 更多