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

Flutter中如何编程获取当年及指定月份的起始日期

Flutter/Dart 实现日期获取方案

Flutter 环境下不需要引入任何第三方日期处理库,直接用内置的DateTime类就能实现需求,所有闰年、月份天数差、时区兼容逻辑官方已经内置处理,不需要手动计算。


1. 获取当前年份的起始日期

当年起始日期就是当前年份的1月1日0点,直接取当前时间的年份,传入DateTime构造器即可:

DateTime getFirstDayOfCurrentYear({bool isUtc = false}) {
  final now = DateTime.now();
  return isUtc ? DateTime.utc(now.year, 1, 1) : DateTime(now.year, 1, 1);
}

如果需要UTC时间传isUtc: true即可,默认返回本地时区时间。


2. 获取指定月份的起始日期

任意月份的起始日期就是对应年份对应月份的1号0点,封装通用方法如下:

/// 获取目标月份的第一天起始时间
/// [year] 目标年份,[month] 目标月份,取值范围1-12
/// [isUtc] 是否返回UTC时间,默认返回本地时区时间
DateTime getFirstDayOfMonth(int year, int month, {bool isUtc = false}) {
  // 月份参数合法性校验,避免非法传参
  assert(month >= 1 && month <= 12, '月份取值必须在1到12区间内');
  return isUtc ? DateTime.utc(year, month, 1) : DateTime(year, month, 1);
}

如果要获取当前年份下指定月份的起始日期,直接传入当前年份即可,示例:

// 获取今年10月的第一天
final now = DateTime.now();
final firstDayOfOct = getFirstDayOfMonth(now.year, 10);

注意事项

  • 不要通过「上月最后一天+1天」的偏移逻辑计算月首,跨夏令时、跨时区场景下容易出现时间偏移bug,直接通过DateTime构造器传入年、月、日=1的写法是最稳定、性能最高的方案。
  • DateTime构造器默认对传入的超范围参数做自动进位,比如传入month=13会自动算成下一年1月,所以加参数校验能避免业务逻辑传参错误。
  • 如果需要特定时分秒的月首/年首时间,直接在构造器里追加hour、minute、second、millisecond参数即可,不传的话默认所有时间字段都是0,刚好对应当日0点的起始时间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:30:15