你的代码是正确的。
如果您确实直接使用从服务器获得的毫秒值,那么我怀疑服务器端的某些内容编码不正确。
请记住,日期代表时间的瞬间,并且不包含时区。
正如文档所说,当前“毫秒”表示“当前时间与 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 可以以毫秒为单位向您显示当前时间,并将毫秒转换为人类可读的格式。