在java应用程序和android应用程序中使用相同java类时使用两种不同的格式

在java应用程序和android应用程序中使用相同java类时使用两种不同的格式,java,android,datetime,time,Java,Android,Datetime,Time,我在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 以下是返回日期的代码[用于相同应用程

我在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();

    }
从android应用程序调用该方法

 Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                            Locale.ENGLISH).parse(_data.get(position).get_date());
                    date2 = offsetTimeZone(date, "UTC", timezoneID);
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();
        }
从java应用程序调用该方法

 Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
                            Locale.ENGLISH).parse(_data.get(position).get_date());
                    date2 = offsetTimeZone(date, "UTC", timezoneID);
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();
        }

这不是一个完整的答案,但为了缩小范围

此文档准确记录了您应该使用的格式:

Android和普通Java都使用相同的输出格式

出于某种原因,一个示例中的zzz显示为GMT+05:30,而另一个示例中的zzz显示为IST


在一种情况下,时区命名数据库可能不知道IST的名称,而是显示了时区偏移量。普通Java的Javadoc说“如果时区信息不可用,那么zzz是空的——也就是说,它根本不包含任何字符。”这表明情况并非如此。

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