2016-11-22 133 views
0

我试图将此时间戳值转换为日期,但它给了我错误的时间。日期是正确的时间戳错误转换迄今为止android

TimeStamp : 1423821615 
True Value : Fri, 13 Feb 2015 10:00:15 GMT 
Android Code shows : Fri, 13 Feb 2015 15:30:15 IST 

这是我用来将时间戳转换为日期的代码。

Date dt = new Date((long)timestampInSeconds * 1000); 

我想这个代码太多,但结果相同

public static Date getDateFromTimeStamp(long timestampInMilliseconds) { 
    Calendar cal = Calendar.getInstance(); 
    cal.setTimeInMillis(timestampInMilliseconds); 
    return cal.getTime(); 
} 

Date dt = getDateFromTimeStamp((long)timestampInSeconds * 1000); 

我不知道我做错了。请帮助


现在我解释整个场景。我的客户来自英国,我来自印度(提前5点30分)。他在英国创造了早上10点的约会。但是现在我在我的本地PC上安装了他的数据库。我的.NET软件显示在SQL服务器的下图中。但在移动领域,它并没有。 PC和手机都在同一时区。

enter image description here

我使用此代码转换日期时间戳记,并通过Web服务

SELECT DATEDIFF(SECOND,{d '1970-01-01'}, Appointments.DateTime) AS AppointmentTimeStamp FROM Appointments 

发送此时间印记到了移动应用是我的.NET软件显示的图像
enter image description here

记录是否在数据库位于英国时区时创建。或者我仍然在某个地方犯错。

+0

检查你的价值,因为你有30分钟不同的是,这不是一个时区问题。 – AxelH

+0

它不是30分钟的差异。它的5小时30分 – Krishna

+3

@AxelH [O'RLY](https://www.timeanddate.com/time/time-zones-interesting.html) – Selvin

回答

0

我不明白你想要得到什么。 如果您将时间设为EPOCH时间,则您没有关于制作此时间戳的时区的信息。所以,你应该知道时区偏移,并且从这个时间戳中减去这个秒。

但我认为最好的方式来使用ISO 8178的时间戳8601格式,可以很容易地转换为任何时区,你需要什么

例如,该代码转换成ISO数据为本地时间或返回当前时间取决于区域设置时区

private long time2LocalTimeZone (String date){ 

     //"2016-07-29T23:07:45.120+00" 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ", Locale.getDefault()); 

     try { 

      return sdf.parse(date).getTime(); 

     } catch (ParseException e){ 

      return (new Date()).getTime(); 

     } 
    } 

这个代码算你从GMT时区偏移,并转换为划时代的时间取决于区域设置时区

private long time2LocalTimeZone (long date){ 
     TimeZone tz = TimeZone.getDefault(); 
     Date now = new Date(); 
     int offsetFromUtc = tz.getOffset(now.getTime())/1000; 
     return date + offsetFromUtc; 
    } 
+0

我需要显示与SQL服务器中存储的时间相同的日期。您可以在第一张图片中看到。我想将时间戳转换为日期而不是日期到时间戳。 – Krishna

+0

现在我只有一种方法来显示我需要的是通过web服务以字符串格式发送日期 – Krishna

+0

好的,ISO字符串像这样yyyy-MM-dd'T'HH:mm:ss.SSSZ包含所有必要的信息数据库可以给你ISO格式的日期。或者如果你的数据库中的所有行都带有GMT时区时间戳,你应该从此时减去330秒bucause android认为它是区域设置时区的Epoch时间 – koa73