【问题标题】:Wrong conversion of time stamp to date android时间戳到日期android的错误转换
【发布时间】:2016-11-22 14:27:44
【问题描述】:

我正在尝试将此时间戳值转换为日期,但它给了我错误的时间。日期正确

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和手机都在同一个时区。

我使用此代码将日期转换为时间戳,并通过网络服务将此时间戳发送到移动应用

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

这是我的 .NET 软件显示的图像

当数据库在英国时区时创建记录是否重要。或者我仍然在某个地方做错了。

【问题讨论】:

  • 检查你的值,因为你有 30 分钟的差异,这不是时区问题。
  • 这不是 30 分钟的差异。 5小时30分钟
  • @AxelH O'RLY
  • @Selvin,好吧,我不知道 ^^ India: UTC +5:30

标签: android


【解决方案1】:

我不明白你想要什么。 如果您将时间作为 EPOCH 时间,则您没有有关制作此时间戳的时区的信息。因此,您应该知道时区偏移量以及该时间戳的正负秒数。

但我认为使用 ISO 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;
    } 

【讨论】:

  • 我需要显示与存储在 SQL 服务器中的时间相同的日期。您可以在第一张图片中看到这一点。我想将时间戳转换为日期而不是日期转换为时间戳。
  • 现在我只有一种显示我需要的方法是通过网络服务以字符串格式发送日期
  • 好的,像 yyyy-MM-dd'T'HH:mm:ss.SSSZ 这样的 ISO 字符串包含所有必要的信息,数据库可以为您提供 ISO 格式的日期。或者,如果您在 DB 中的所有行都带有 GMT 时区时间戳,那么您应该从此时起减去 330 秒,因为 android 认为这是语言环境时区中的纪元时间
  • 我添加了更多示例,但只有当您在 DB 中的记录在 GMT 或任何其他时区具有恒定时间戳时,这才是好方法
猜你喜欢
  • 2015-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2014-09-25
  • 1970-01-01
  • 2011-03-29
  • 2012-05-04
相关资源
最近更新 更多