0

我以毫秒为单位从服务器获取时间,并尝试将其转换为本地时间。我想像这样使用 Java 将它传递给我的 PrettyTime:

PrettyTime p = new PrettyTime();
long millisec = 1522034539973;

    String time = p.format(new Date(millisec));

但结果是提供的 UTC 时间到 currentTime 的相对时间;我需要以millisec毫秒为单位转换为本地时间。请帮忙!

PS:我用的是安卓

4

2 回答 2

0

您可以尝试从 java.util.Calendar 获取时间。这是一个例子:

Calendar.getInstance(TimeZone.getDefault()).getTimeInMillis()

您还可以通过特定的语言环境获取时间:

Calendar.getInstance(Locale.getDefault()).getTimeInMillis()
于 2018-03-25T20:32:04.320 回答
0

你的代码是正确的。

如果您确实直接使用从服务器获得的毫秒值,那么我怀疑服务器端的某些内容编码不正确。

请记住,日期代表时间的瞬间,并且不包含时区。

正如文档所说,当前“毫秒”表示“当前时间与 1970 年 1 月 1 日 UTC(协调世界时)午夜之间的差异,以毫秒为单位” - 因此,与“纪元日期”的偏移量以毫秒为单位.

在您为特定区域格式化日期之前,日期没有时区 - 它们只包含这个毫秒偏移量。

所以,如果你得到的时间不是你所期望的,要么是服务器发送了不正确的值,要么是当你调用 format() 时 PrettyTime 推断出不正确的本地时区。PrettyTime 似乎使用当前配置的语言环境,所以这可能不是问题。

我建议您通过使用本地生成的日期测试 PrettyTime 来测试服务器时间是否是问题,如下所示:

Date now = new Date();
System.out.println(p.format(now));

如果你真的想说服自己客户端一切正常,试试这个:

Date now = new Date();
long msec = now.getTime();
Date theDate = new Date(msec);
System.out.println(p.format(theDate));

此外,要了解服务器实际发送给您的内容,https: //currentmillis.com 可以以毫秒为单位向您显示当前时间,并将毫秒转换为人类可读的格式。

于 2018-03-25T18:49:17.957 回答