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

如何在Dart中获取本地化的星期名称列表?

解决Dart中获取指定Locale完整星期名称列表的问题

嘿,这个需求我刚好处理过!在Dart里要获取指定本地化的完整星期名称列表,最靠谱的方案就是借助官方推荐的intl包来实现,下面给你两种可行的思路,按需选择:

方法一:通过生成日期+格式化(灵活控制顺序)

这种方法的好处是你可以精确控制星期的排列顺序(比如你例子里想要的周日开头),完全不用担心不同Locale的星期起始差异。

步骤1:添加依赖

首先在你的pubspec.yaml里引入intl包:

dependencies:
  intl: ^0.18.1 # 可以替换成最新版本

步骤2:实现函数

直接写一个工具函数,生成从指定起始日(比如某个周日)开始的7个日期,然后用DateFormat格式化出每个日期的完整星期名称:

import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';

List<String> getLocalizedWeekDays(String locale) {
  // 先初始化对应Locale的日期本地化数据
  initializeDateFormatting(locale);
  
  // 创建针对该Locale的星期格式器('EEEE'表示完整星期名称)
  final weekDayFormatter = DateFormat('EEEE', locale);
  
  // 选一个已知是周日的日期作为起点(比如2023年1月1日)
  final startDate = DateTime(2023, 1, 1);
  
  // 生成7个连续日期,分别格式化出星期名称
  return List.generate(7, (index) {
    final currentDate = startDate.add(Duration(days: index));
    return weekDayFormatter.format(currentDate);
  });
}

// 测试示例
void main() {
  var enWeekDays = getLocalizedWeekDays('en_US');
  print(enWeekDays); // 输出: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
  
  var frWeekDays = getLocalizedWeekDays('fr_FR');
  print(frWeekDays); // 输出: ['dimanche', 'lundi', 'mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi']
}

如果需要缩写的星期名称(比如Sun、Mon),只需要把DateFormat('EEEE', locale)改成DateFormat('E', locale)或者DateFormat('EE', locale)即可,具体格式可以参考intl包的文档。

方法二:直接使用DateSymbols(遵循Locale默认顺序)

如果你希望返回的星期顺序遵循目标Locale的本地习惯(比如欧洲很多地区是周一开头),可以直接通过DateSymbols获取:

import 'package:intl/intl.dart';
import 'package:intl/date_symbol_data_local.dart';

List<String> getLocalizedWeekDays(String locale) {
  initializeDateFormatting(locale);
  final dateSymbols = DateSymbols(locale);
  // STANDALONE_WEEKDAYS是用于独立展示的星期名称(比如日历表头)
  return dateSymbols.STANDALONE_WEEKDAYS;
}

比如用de_DE作为Locale,返回的列表会是['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'](周一到周日的顺序)。

注意事项

  • 必须调用initializeDateFormatting(locale)来初始化对应Locale的本地化数据,否则会报错;如果需要支持多个Locale,可以调用不带参数的initializeDateFormatting(),但会增加包体积,建议按需初始化。
  • intl包支持绝大多数主流Locale,如果你需要的Locale比较小众,可以先确认是否在支持列表里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 15:39:10