【问题标题】:Android: how to get the default date format based on device timezoneAndroid:如何根据设备时区获取默认日期格式
【发布时间】:2020-12-26 19:27:55
【问题描述】:

是否有任何简单的方法可以根据用户的时区获取默认日期格式?

SimpleDateFormat() 根据用户区域设置提供日期格式。我正在寻找需要将提供的日期转换为基于时区的日期格式的场景。

例如,用户将她的语言环境设置为“中文”,在德国时区中,日期格式应为dd.mm.yyyy

【问题讨论】:

  • 你的问题真的没有意义。时区与 UTC 有一组历史的和已知的未来偏移量,但它没有默认的日期格式。如果用户将时区设置为欧洲/柏林,您可能会发现德国的某些格式是合适的。一些国家有更多的语言和每种语言的日期格式。如果用户将时区设置为 +02:00(这很愚蠢,但有些用户会这样做),那么肯定不会有任何日期格式。
  • 有什么建议需要将日期转换为基于默认时区的格式?

标签: java android datetime timezone


【解决方案1】:

你可以这样做:

  1. 使用Geolocation API 获取国家/地区代码,例如通过解析来自 URL 的 JSON,http://ip-api.com/json 可以获取国家/地区代码。

  2. 循环通过Locale.getAvailableLocales(),假设使用循环变量locale 并返回locale 对应的locale.getCountryCode().equals(the-country-code-obtained-from-the-json)

  3. 利用得到的Locale,得到如下所示的日期模式:

    String datePattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT, null,
                        IsoChronology.INSTANCE, locale);
    

【讨论】:

  • Arvind,再次感谢。我们可以在日期格式化 w.r.t. 时考虑替代解决方案吗?时区?
  • @Faisal - 一种格式(例如日期格式、时间格式、日期和时间格式、数字格式等)是Locale 的一部分。时区与Locale 没有任何关系。有许多国家(例如美国、俄罗斯等)有许多时区,但只有一个 Locale,即无论用户在美国的哪个时区,区域设置(以及格式)都将是一样。
【解决方案2】:

试试这个从设备获取日期格式:

Format dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());
String pattern = ((SimpleDateFormat) dateFormat).toLocalizedPattern();

【讨论】:

  • 谢谢,但上面的 sn-p 会根据区域设置生成日期格式。
猜你喜欢
  • 2020-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-20
  • 2022-01-11
  • 2017-11-16
相关资源
最近更新 更多