我得到了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的链接.
请注意
>如果要在特定语言环境中格式化时间字符串,请初始化格式化程序,以该特定语言环境作为初始化参数.
>提供的解决方案的好处是将根据设备的默认语言环境正确格式化时间字符串.但是,如果要使用特定的格式表示时间,并且在所有设备上也要保持一致,请使用SimpleDateFormat.