Dart / Flutter 默认日期格式

10

我试图格式化DateTime结果,并将其以用户当前设备语言环境的形式显示给用户。

目前我可以显示完整的DateTime,例如:

2018-10-08 16:08:37.464112

或者通过指定确切的格式来显示:

DateFormat("dd.MM.yyyy").format(DateTime.now())

导致以下结果:

2018年10月8日

我对这个解决方案的问题在于,尽管这种格式可能在欧盟是可接受的;但例如在美国(和许多其他国家),他们习惯于不同的日期格式,例如:

2018/10/08

我的问题是:如何以当前用户所在地区的格式(只返回日期而非时间)返回日期?

答案:
需要获取当前地区并将其传递给格式化函数。我正在使用自定义本地化类,但使用现成的解决方案会像这样:

DateFormat.yMMMd(Localizations.localeOf(context)).format(result);

你可以像这样传递一个区域设置到 DateFormat 中:format = new DateFormat.yMMMd("en_US");。请参阅 https://docs.flutter.io/flutter/intl/DateFormat-class.html,https://flutter.io/tutorials/internationalization/。 - Günter Zöchbauer
将以下与编程相关的内容从英文翻译成中文。只返回翻译后的文本:将其作为单独的文章标记为答案。 - Robert J.
1
对我没用,因为localeOf没有返回字符串,所以我做了这个,然后它就起作用了:var local = Localizations.localeOf(context).toString(); var formattedDate = DateFormat.yMMMd(local).format(myDate); - Cold_Class
2个回答

16

我知道这个问题已经有答案了,但是如果有人想要使用实际设备的语言环境而不是硬编码的语言环境:

DateFormat.yMMMd(Localizations.localeOf(context).languageCode).format(result);

重要说明:需要传递String对象而不是Locale对象。

如果您希望有自定义的日期格式,则需要基于您想支持的所有区域设置创建自己的switch/case。


7

1
我很感谢你的回答,但我有一个问题,为什么你在回答中仍然使用 new 关键字? - CopsOnRoad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接