【问题标题】:Localized date and time in Codename One代号一中的本地化日期和时间
【发布时间】:2019-01-14 11:06:04
【问题描述】:

这个问题不涉及通用 Java,而只涉及 Codename One。

我试过了:

SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.FULL, SimpleDateFormat.FULL).format(new Date());

返回(在模拟器和 Android 上):

Sun Jan 13 14:41:35 CET 2019

如何获得日期和时间的本地化版本?我的意思是自动本地化,不需要我为每个语言环境指定格式。

例如,当我在意大利智能手机上运行应用程序时,我希望得到一个等价的字符串,例如:

13 gennaio 2019, 14:41:35

如果可能的话,没有星期几的名称,也没有“CET”。

我注意到(SimpleDateFormat.FULL, SimpleDateFormat.FULL)(SimpleDateFormat.SHORT, SimpleDateFormat.SHORT) 在此示例中返回相同的字符串。

【问题讨论】:

  • 更新:在 iPhone 上,它显示13 January 2019 没有时间。相反,我需要时间,并且可能需要在 Android、iPhone 和网络应用程序上使用相同的字符串。
  • 您正在使用可怕的旧日期时间类,这些类在几年前已被 java.time 类取代。见DateTimeFormatter.ofLocalized…。如果 Codename One 不支持 Java 8 或更高版本,请了解 ThreeTen-BackportThreeTenABP 项目。

标签: codenameone


【解决方案1】:

您需要使用 L10NManager,其中包括日期/时间的格式化程序,例如:

String asString = L10NManager.getInstance().formatDateLongStyle(date);

【讨论】:

  • 谢谢,L10NManager.getInstance().formatDateTimeMedium(new Date()); 解决了我的问题。我注意到在 Android、iPhone 和 web-app 上返回的字符串之间几乎没有区别。例如,Android 返回14 gen 2019 11:20:33 AM,iPhone 返回14 Jan 2019 at 11:15:20,而Android Chrome 上的Web 应用返回14/1/2019, 11:22:17
  • 这使用 OS 原生 API 进行 Android/iOS 上的格式化。我不确定它是否在网络版本中正确实施。由于操作系统原生 API 会产生不同的结果,因此您会看到不同的结果。
猜你喜欢
  • 2016-12-18
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-29
相关资源
最近更新 更多