gpt4 book ai didi

Android DateUtils.formatDateTime 时区错误

转载 作者:太空宇宙 更新时间:2023-11-03 13:48:13 35 4
gpt4 key购买 nike

String time = DateUtils.formatDateTime(context, 1469602800000, DateUtils.FORMAT_SHOW_TIME);

结果是:03:00 符合预期

我当前的时区是:GMT+3:00 DST

但是,如果我不能将时区传递给 dateformatter,我如何才能得到:“00:00”?

我已经试过了:

TimeZone timeZone = getTimezoneForId("America/Los_Angeles");

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(timeZone);
calendar.setTimeInMillis(1469602800000);

String time = new SimpleDateFormat("HH:mm", Locale.getDefault()).format(calendar.getTime());

但我得到了相同的结果:“03:00

最佳答案

我得到了 DateUtils 的解决方案,而没有使用像 Calendar 甚至 SimpleDateFormat 这样沉重的对象。

// Your UTC time in milliseconds:
long timeInMillis = 1469602800000;

// Desired timezone ID:
String timezoneId = "UTC";

java.util.Formatter f = new java.util.Formatter(new StringBuilder(50), Locale.getDefault());
String time = DateUtils.formatDateRange(context, f, timeInMillis, timeInMillis, DateUtils.FORMAT_SHOW_TIME, timezoneId).toString();

解释:

如果你看源码,你会发现当你调用的时候

formatDateTime(Context context, long millis, int flags)

返回调用结果

formatDateRange(context, millis, millis, flags);

具体实现如下:

public static String formatDateRange(Context context, long startMillis,long endMillis, int flags) {
Formatter f = new Formatter(new StringBuilder(50), Locale.getDefault());
return formatDateRange(context, f, startMillis, endMillis, flags).toString();
}

再次查看源代码

formatDateRange(context, f, startMillis, endMillis, flags)

您将看到以下内容:

return formatDateRange(context, formatter, startMillis, endMillis, flags, null);

如果仔细查看最后一行,您会发现它提供了 null 作为 String timezone 参数。因此,根据该方法的注释,它将计算您的本地 时区的值。官方文档建议使用 Time.TIMEZONE_UTC,但该功能已被弃用,因此在我的解决方案中我明确设置了时区 (timezoneId = "UTC")。您可以设置您需要的任何时区,例如“太平洋/火奴鲁鲁”甚至“亚洲/新西伯利亚”。这是 complete list of timezones IDs 的链接.

请注意

  1. 如果您希望您的 time 字符串在特定的语言环境中进行格式化,请初始化 Formatter,提供该特定的语言环境作为初始化参数。
  2. 提供的解决方案的好处是 time 字符串将根据设备的默认区域设置正确格式化。但是,如果您想使用特定格式来表示时间,并且在所有设备上都保持一致,请使用 SimpleDateFormat

关于Android DateUtils.formatDateTime 时区错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38594746/

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