正如标题中所述:是否有一种简单的方法可以在用户语言环境中将一周中的所有日子作为字符串(在课程列表中)获取?
小智 13
使用 intl 包,我发现最简单的方法是:
import 'package:intl/intl.dart';
var days = DateFormat.EEEE(Platform.localeName).dateSymbols.STANDALONEWEEKDAYS;
print(days) // => ["Sunday", "Monday", ..., "Saturday"]
Run Code Online (Sandbox Code Playgroud)
您可以替换STANDALONEWEEKDAYS为WEEKDAYS来获取句子中出现的名称(例如,某些语言中的首字母小写)。
另外,您可以分别使用SHORTWEEKDAYS和STANDALONESHORTWEEKDAYS来获取工作日缩写。对于更短的缩写,请使用NARROWWEEKDAYS或STANDALONENARROWWEEKDAYS。
我的建议是:
static List<String> getDaysOfWeek([String locale]) {
final now = DateTime.now();
final firstDayOfWeek = now.subtract(Duration(days: now.weekday - 1));
return List.generate(7, (index) => index)
.map((value) => DateFormat(DateFormat.WEEKDAY, locale)
.format(firstDayOfWeek.add(Duration(days: value))))
.toList();
}
Run Code Online (Sandbox Code Playgroud)
这个想法是我们根据当前工作日定义当前周第一天的日期。然后从计算日期开始循环 7 次,每次迭代增加 1 天并收集DateFormat()的结果。具有模式 DateFormat 的格式方法。工作日。为了提高性能,您可以使用延迟初始化。例如:
/// Returns a list of week days
static List<String> _daysOfWeek;
static List<String> get daysOfWeek {
if (_daysOfWeek == null) {
_daysOfWeek = getDaysOfWeek(); // Here you can specify your locale
}
return _daysOfWeek;
}
Run Code Online (Sandbox Code Playgroud)
做完后:
import 'package:intl/date_symbol_data_local.dart';
String localeName = "pt_BR"; // "en_US" etc.
initializeDateFormatting(localeName);
Run Code Online (Sandbox Code Playgroud)
用这个:
static List<String> weekDays(String localeName) {
DateFormat formatter = DateFormat(DateFormat.WEEKDAY, localeName);
return [DateTime(2000, 1, 3, 1), DateTime(2000, 1, 4, 1), DateTime(2000, 1, 5, 1),
DateTime(2000, 1, 6, 1), DateTime(2000, 1, 7, 1), DateTime(2000, 1, 8, 1),
DateTime(2000, 1, 9, 1)].map((day) => formatter.format(day)).toList();
}
Run Code Online (Sandbox Code Playgroud)
我不确定它是否符合“简单”的条件。也许这里有人可以想出更好的答案。
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |