Java 将两个GMT时间实例之间的时间差计算为字符串

Java 将两个GMT时间实例之间的时间差计算为字符串,java,android,eclipse,Java,Android,Eclipse,我正在尝试以字符串格式获取日期之间的时差,就像4小时前一样 这是我的密码 据我所知,Calendar.getInstance()给出的时间是GMT。我的服务器时间是GMT,因此差异应该是GMT与GMT,但是此代码的差异是GMT(服务器)与GMT+5(我当前的时区) 我怎样才能只在格林威治标准时间做出改变 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date converted

我正在尝试以字符串格式获取日期之间的时差,就像4小时前一样

这是我的密码

据我所知,
Calendar.getInstance()
给出的时间是GMT。我的服务器时间是GMT,因此差异应该是GMT与GMT,但是此代码的差异是GMT(服务器)与GMT+5(我当前的时区)

我怎样才能只在格林威治标准时间做出改变

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date convertedDate = new Date();

        Calendar systemCal = Calendar.getInstance();            
        long currentTime = systemCal.getTimeInMillis();

        /***********************************/
        Calendar cal = Calendar.getInstance();

        try {
            convertedDate = dateFormat.parse(dateString);
        } catch (Exception e) {
            return "";
        }
        cal.setTime(convertedDate);
        /***********************************/
        CharSequence myDateString = DateUtils.getRelativeTimeSpanString(cal.getTimeInMillis(), currentTime, DateUtils.MINUTE_IN_MILLIS);
        return myDateString.toString();     
Calendar.getInstance()返回计算机设置的时区。所以,除非你总是能控制它,否则我建议你使用getInstance(TimeZone)方法

但如果你想要一个更简单的方法,我会建议你找乔达的时间


尝试以下代码。它清楚地演示了如何将字符串datetime解析为GMT时区。关键点是设置默认时区的第一行

    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();

    try {
        Date convertedDate = dateFormatGmt.parse("2015-01-29 10:05:00");
        long diffSeconds = (cal.getTimeInMillis() - convertedDate.getTime()) / 1000;
        System.out.println("convertedDate: " + convertedDate);
        System.out.println("current: " + cal.getTime());
        System.out.println("Difference in seconds: " + diffSeconds);
    }
    catch (Exception e) {
        e.printStackTrace();
    }

您可以将lacale传递给SimpleDataFormat的构造函数SimpleFormat与此无关。它已经在GMTCalendar中了。getInstance()不以GMT表示时间。它返回计算机的时区。它仍然是一样的,我认为默认情况下它确实发送GMT时间,这是DateUtils的问题。getRelativeTimeSpanStringi找到了简单的解决方案。我将服务器时间调到时区,然后计算出差值。迄今为止最简单的解决方案。设置dateFormatGmt.setZone(TimeZone.getDefault())
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
    SimpleDateFormat dateFormatGmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Calendar cal = Calendar.getInstance();

    try {
        Date convertedDate = dateFormatGmt.parse("2015-01-29 10:05:00");
        long diffSeconds = (cal.getTimeInMillis() - convertedDate.getTime()) / 1000;
        System.out.println("convertedDate: " + convertedDate);
        System.out.println("current: " + cal.getTime());
        System.out.println("Difference in seconds: " + diffSeconds);
    }
    catch (Exception e) {
        e.printStackTrace();
    }