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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 21:51:19