android 如何将UTC毫秒时间转换为毫秒本地时间

pu82cl6c  于 2023-06-20  发布在  Android
关注(0)|答案(3)|浏览(172)

我从服务器获取毫秒时间,并尝试将其转换为本地时间。我想把它传递给我的PrettyTime Using Java,如下所示:

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

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

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

PS:我用的是安卓系统

xcitsw88

xcitsw881#

你的代码是正确的。
如果您确实直接使用了从服务器获得的毫秒值,那么我怀疑服务器端的代码不正确。
请记住,日期表示时间中的瞬间,并且不包含时区。
正如文档中所说,当前的“毫秒”表示“当前时间与1970年1月1日午夜UTC(协调世界时)之间的差异,以毫秒为单位”-因此,从“历元日期”的偏移量以毫秒为单位。
日期没有时区,直到您将它们格式化为特定的区域-它们只包含此毫秒偏移量。
因此,如果您得到的时间与预期的时间不同,则服务器发送的值不正确,或者PrettyTime在调用format()时推断出的本地时区不正确。PrettyTime似乎使用了当前配置的Locale,所以这可能不是问题所在。
我建议您通过使用本地生成的日期测试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可以用米利斯显示当前时间,并将millis转换为人类可读的格式。

camsedfj

camsedfj2#

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

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

您也可以通过特定的locale获取时间:

Calendar.getInstance(Locale.getDefault()).getTimeInMillis()
0tdrvxhp

0tdrvxhp3#

第182章不工作它仍然得到百万UTC。

此代码工作:

long mili_UTC = System.currentTimeMillis(); // ex: 1687067040633

TimeZone tz = TimeZone.getDefault();

long offsetFromUtc = tz.getOffset(mili_UTC);

// will get miliseconds of local timezone
long mili_Of_Local = mili_UTC + offsetFromUtc; // ex: 1687092240633

相关问题