Dart如何编程获取指定日期前后一天的星期名称
Dart 完全可以通过原生内置能力实现该需求,不需要引入复杂的第三方依赖,核心依靠DateTime类的日期计算能力即可完成。
核心实现逻辑
- 用
DateTime.add()方法传入天级别的时间差,计算出前一天、后一天的完整日期对象,该方法会自动处理跨周、跨月、跨年、闰年的日期进位,不需要手动编写边界判断 DateTime自带的weekday属性会返回1~7的整数值,依次对应周一到周日,直接映射成需要的星期名称文本即可
可直接运行的代码示例
// 星期名称映射表,索引和DateTime.weekday的返回值一一对应 const weekNameList = ['', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六', '星期日']; /// 计算目标日期偏移指定天数后的星期名称 /// [target] 目标日期 /// [offset] 偏移天数,传-1为前一天,传1为后一天,支持任意正负整数偏移 String getOffsetWeekName(DateTime target, int offset) { final offsetDate = target.add(Duration(days: offset)); return weekNameList[offsetDate.weekday]; } void main() { // 测试用例:指定日期为2024年10月18日(星期五) final testDate = DateTime(2024, 10, 18); print('当天星期:${weekNameList[testDate.weekday]}'); print('前一天星期:${getOffsetWeekName(testDate, -1)}'); print('后一天星期:${getOffsetWeekName(testDate, 1)}'); // 边界场景测试:周日的后一天 final testSunday = DateTime(2024, 10, 20); print('周日的后一天星期:${getOffsetWeekName(testSunday, 1)}'); }
运行后输出结果:
当天星期:星期五 前一天星期:星期四 后一天星期:星期六 周日的后一天星期:星期一
扩展说明
- 如果需要其他语言/格式的星期名称,直接修改
weekNameList里的文本即可,比如替换为英文缩写、全称 - 如果需要做多语言国际化适配,可以结合intl包的日期格式化能力,直接按指定locale输出对应语言的星期名称,不需要手动维护映射表,基础用法参考:
// 引入intl包后可直接生成本地化星期文本 import 'package:intl/intl.dart'; String getLocalizedWeek(DateTime date, String localeCode) { return DateFormat('EEEE', localeCode).format(date); }
注意避坑
- 不要直接对
weekday的返回值做加减来算星期,比如周日的weekday是7,直接加1得到8会超出映射表范围,必须先算出偏移后的完整日期对象再取weekday值 - 构造DateTime对象时默认使用本地时区,如果需要统一用UTC时间计算,可以使用
DateTime.utc()构造方法,偏移逻辑不受时区选择影响
内容的提问来源于stack exchange,提问作者Ashraful Alam
相关产品推荐
相关产品推荐

