将两个GMT时间实例之间的时间差计算为String

时间:2015-01-29 09:58:45

标签: java android eclipse

我试图将日期之间的时差视为4小时前的字符串格式。

这是我的代码

根据我的理解,Calendar.getInstance()给出时间作为GMT。我的服务器时间是GMT所以差异应该是GMT Vs GMT但是这个代码的差异是GMT(服务器)Vs. GMT +5(我当前时区)

我如何才能与GMT产生差异?

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

2 个答案:

答案 0 :(得分:0)

Calendar.getInstance()返回计算机设置的时区。因此,除非你总是控制我,否则我会建议使用getInstance(TimeZone区域)方法。

http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html#getInstance%28java.util.TimeZone%29

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));

但是如果你想要一个更简单的方法来做这件事,我建议你去看看joda时间。

http://www.joda.org/joda-time/

答案 1 :(得分:0)

请尝试以下代码。它清楚地说明了如何将String 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();
    }