【问题标题】:Dart / Flutter default date formatDart / Flutter 默认日期格式
【发布时间】:2019-03-13 08:42:03
【问题描述】:

我正在尝试格式化 DateTime 结果并在用户当前的设备区域设置中显示给用户。

目前我可以显示整个DateTime,如下所示:

2018-10-08 16:08:37.464112

或者通过像这样指定确切的格式:

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

结果如下:

08.10.2018

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

2018 年 10 月 8 日

我的问题是:如何以用户当前语言环境的格式只返回日期(而不是时间)?

回答
需要检索当前语言环境并将其传递给格式函数。我正在使用自定义本地化类,但使用开箱即用的解决方案它看起来像这样:

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

【问题讨论】:

  • 您可以将语言环境传递给DateFormat,例如format = new DateFormat.yMMMd("en_US");。另见docs.flutter.io/flutter/intl/DateFormat-class.htmlflutter.io/tutorials/internationalization
  • 将其作为单独的文章标记为答案。
  • 对我不起作用,因为 localeOf 没有返回字符串,所以我这样做了,它起作用了:var local = Localizations.localeOf(context).toString(); var formattedDate = DateFormat.yMMMd(local).format(myDate);

标签: datetime dart flutter string-formatting


【解决方案1】:

我知道这已经得到解答,但如果有人想使用实际的设备语言环境而不是硬编码的语言环境:

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

重要的是,您需要在此处传递 String 而不是 Locale 对象。

如果您想要自定义日期格式,则需要根据您想要支持的所有语言环境创建自己的开关/案例。

【讨论】:

    【解决方案2】:

    您可以将语言环境传递给DateFormat,例如

    format = DateFormat.yMMMd("en_US");
    

    另见

    【讨论】:

    • 感谢您的回答,但我有一个问题,为什么您仍然在回答中使用new 关键字?
    猜你喜欢
    • 2021-01-17
    • 2018-02-12
    • 2016-01-25
    • 1970-01-01
    • 2021-10-12
    • 2013-05-09
    • 1970-01-01
    • 2020-11-30
    • 2019-08-12
    相关资源
    最近更新 更多