You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用day.dart格式化日期时12小时显示为0的问题及选型咨询

Day.dart日期格式化显示0:00 AM而非12:00 AM的问题解决

问题原因与修复方案

你遇到的问题大概率是未正确配置本地化导致的。day.dart的h格式符(12小时制)需要依赖本地化配置来处理午夜/正午的12小时转换,默认状态下可能没有启用这个逻辑,才会输出0:00 AM而非预期的12:00 AM。

修复步骤:

  • 先确认已引入对应本地化包,在pubspec.yaml中确保依赖完整
  • 初始化Day.dart时设置本地化,示例代码:
    import 'package:day/day.dart';
    import 'package:day/locale/en_us.dart';
    
    void main() {
      Day.setLocale(enUsLocale);
    }
    
  • 如果配置后还是有问题,尝试替换格式串为hh:mm A,hh是带前导零的12小时制格式符,测试是否能输出12:00 AM

要是以上操作都无效,那大概率是库的bug,建议去项目仓库搜索已有issues,或者提交新问题反馈。

Day.dart使用建议

  • 初始化时务必设置正确的本地化,很多格式化、时区相关问题都源于此
  • 记清楚常用格式符的区别:
    • h: 12小时制(1-12,无前置零)
    • hh: 12小时制(01-12,有前置零)
    • H: 24小时制(0-23)
    • HH: 24小时制(00-23)
  • 复杂日期处理优先用库内置方法,别自己拼接字符串,减少出错

原生DateTime替代方案

不想依赖第三方库的话,可以用Dart的intl包实现需求,原生逻辑对12小时制的午夜/正午处理更稳定:

import 'package:intl/intl.dart';

void main() {
  final midnight = DateTime(2024, 1, 1, 0, 0);
  final formatted = DateFormat('h:mm a').format(midnight);
  print(formatted); // 输出12:00 AM
}

注意这里用小写a表示AM/PM标识,intl包的h格式符会自动将0点转换为12点。

另外,原生DateTime的小技巧:

  • 处理时区问题可以用DateTime.utc或结合intl的时区支持
  • 自定义格式化前,先核对intl的格式符文档,避免用错

内容的提问来源于stack exchange,提问作者Eric Russell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 20:05:07