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
相关产品推荐
相关产品推荐

