Android时区问题,困惑

时间:2016-06-21 09:27:21

标签: android timezone datetimeoffset

我有一个像这样的日期 Tue Jun 21 14:47:37 GMT + 05:30 2016 ,我自己制作。我用日历创建它。用户选择日期的地方,我将其保存为日历中的毫秒数。 当我发送它,发送它时,我再次创建一个日历实例,将保存的毫秒放入其中并得到如下日期:

Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getDefault());
    calendar.setTimeInMillis(SSPreferences.getDate());

现在从日历中获取日期时我会这样做:

calendar.getTime()//This is what I send to server.

我将它发送到服务器,但是当服务器向我发送日期时,它总是在我的时间前5.5小时。

我知道我的时间是GMT + 5:50。那么服务器在做什么呢? 如何发送日期,以便我回到发送到服务器的相同日期。

感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:0)

检查这个

static final String DATEFORMAT = "yyyy-MM-dd HH:mm:ss"

public static Date GetUTCdatetimeAsDate()
{
    //note: doesn't check for null
    return StringDateToDate(GetUTCdatetimeAsString());
}

public static String GetUTCdatetimeAsString()
{
    final SimpleDateFormat sdf = new SimpleDateFormat(DATEFORMAT);
    sdf.setTimeZone(TimeZone.getTimeZone("UTC"));
    final String utcTime = sdf.format(new Date());

    return utcTime;
}

public static Date StringDateToDate(String StrDate)
{
    Date dateToReturn = null;
    SimpleDateFormat dateFormat = new SimpleDateFormat(DATEFORMAT);

    try
    {
        dateToReturn = (Date)dateFormat.parse(StrDate);
    }
    catch (ParseException e)
    {
        e.printStackTrace();
    }

    return dateToReturn;
}

答案 1 :(得分:0)

最后,我通过在本地时区添加/减去rawOffSet来解决问题。

    TimeZone timeZone = TimeZone.getDefault();
    int offset = timeZone.getOffset(SSPreferences.getDate());
    WriteLog.Print("offset is "+offset);
    long newtime = SSPreferences.getDate() + offset;
    calendar.setTimeInMillis(newtime);