gpt4 book ai didi

java - android 中的不同时区

转载 作者:行者123 更新时间:2023-12-03 08:01:09 25 4
gpt4 key购买 nike

我的应用程序使用 OnStart() 方法保存本地时间,并且我使用下面的代码将时间转换为“时间之前”,但是当来自不同时区的两个人时,此方法不起作用,它总是显示不正确 不久前

private void updateUserStatus(String state)
{
String lastSeenTime;
Calendar calendar = Calendar.getInstance(Locale.ENGLISH);

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
lastSeenTime = dateFormat.format(calendar.getTime());
HashMap<String,Object> onlineStatemap = new HashMap<>();
onlineStatemap.put("lastSeen", lastSeenTime);
onlineStatemap.put("state", state);
if (firebaseUser != null )
{
currentUserID = firebaseAuth.getCurrentUser().getUid();
RootRef.child("Users").child(currentUserID).child("userState").updateChildren(onlineStatemap);

}

}



private String calculateTime(String lastSeenTT)
{
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
try {
long time = sdf.parse(lastSeenTT).getTime();
long now = System.currentTimeMillis();
CharSequence ago =
DateUtils.getRelativeTimeSpanString(time, now, DateUtils.MINUTE_IN_MILLIS);
return ago+"";
} catch (ParseException e) {
e.printStackTrace();
}
return "";
}


String timeAgo = calculateTime(lastSeenTT);

最佳答案

tl;博士

Duration.between ( then , Instant.now() ) 

详细信息

您正在使用可怕的日期时间类,这些类在几年前已被现代的 java.time 类取代。

捕捉瞬间时,使用与 UTC 的零时-分-秒偏移。为此,Instant 类。

Instant then = Instant.now() ;

Instant now = Instant.now() ;

Duration 类表示以小时-分钟-秒为单位的耗时。

Duration d = Duration.between ( then , now ) ;

请注意,不涉及时区。

将日期时间值作为 java.time 对象而不是文本来跟踪。仅根据日志记录、调试和向用户呈现的需要生成文本。


java.time 类内置于 Android 26+ 中。对于早期的 Android,最新工具中的“脱糖”功能使大多数 java.time 功能可用。

关于java - android 中的不同时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74157506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com