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

Flutter日期周几显示异常:周五及之后显示错误问题咨询

这不是Bug,是DateTime构造函数的使用误区

首先得澄清:这个问题不是DateFormat的Bug,而是你对DateTime构造函数的参数理解有误导致的。

问题根源

DateTime.friday是DateTime类的一个常量,它的取值是5,代表一周中的星期五(周一为1,周日为7)。但你写的DateTime(DateTime.friday),调用的是DateTime的默认构造函数:

DateTime(int year, [int month = 1, int day = 1, int hour = 0, int minute = 0, int second = 0, int millisecond = 0, int microsecond = 0])

第一个参数是年份,所以这行代码实际创建的是公元5年1月1日,而那天的星期恰好是星期六,所以DateFormat('EEEE')输出Saturday是完全正确的。

正确的用法

如果你想格式化一个星期五的日期,需要创建一个实际是周五的DateTime对象,比如:

  • 创建一个指定的周五日期:
    Text(DateFormat('EEEE').format(DateTime(2024, 5, 17))) // 2024年5月17日是周五,输出Friday
    
  • 或者判断当前日期是否是周五,再格式化:
    final today = DateTime.now();
    if (today.weekday == DateTime.friday) {
      Text(DateFormat('EEEE').format(today)); // 输出Friday
    }
    
  • 也可以通过计算生成一个周五的日期,比如基于当前日期调整:
    final nextFriday = DateTime.now().add(Duration(days: (DateTime.friday - DateTime.now().weekday + 7) % 7));
    Text(DateFormat('EEEE').format(nextFriday)); // 输出Friday
    

总结

DateFormat('EEEE')的工作逻辑是正常的,问题出在你错误地将星期常量当作年份传入了DateTime构造函数,导致创建的日期不是你预期的周五。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 07:31:57