如何在Python中确定一周的第一天

3 投票
4 回答
4286 浏览
提问于 2025-04-16 07:32

根据地区设置,我需要找出一周的第一天是星期天还是星期一。在JAVA中,我会这样做:

Calendar FR_cal = Calendar.getInstance(Locale.FRANCE);
Calendar CA_cal = Calendar.getInstance(Locale.CANADA);

DateFormatSymbols dfs = new DateFormatSymbols();
String weekdays[] = dfs.getWeekdays();

System.out.println(weekdays[JO_cal.getFirstDayOfWeek()]);
System.out.println(weekdays[FR_cal.getFirstDayOfWeek()]);

那我在Python中该怎么做呢?

4 个回答

0

在很多欧洲国家,尤其是现在,日历都按照国际标准(ISO)来安排,周一被定为一周的第一天。航空公司的时刻表也是这样,从周一开始算,周一是1,周二是2,周三是3,依此类推。

以上内容说明,周一应该始终是每周的第一天。

1

这个功能在Python标准库中似乎缺失,至少在Python 3.1.2版本之前都是这样。


一些线索:

因为这方面的信息通常和系统的本地化数据一起存储(在GNU系统中,这些数据可能在/usr/share/i18n/locales/目录下),我最开始的想法是使用类似于locale.nl_langinfo()的东西,但遗憾的是,locale模块里并没有像locale.FIRST_WEEKDAY这样的内容 :-(

除了aaronasterling提到的Babel库,我还找到了一些解决方案的例子,这是一个在GNOME小程序中使用的解决方案示例。另外,还有一篇相关的博客文章值得一看

7

我只找到了一种方法可以做到这一点,就是使用Babel这个库。你可以通过easy_install来安装它。

>>> import babel
>>> locale = babel.Locale('en', 'US')
>>> locale.first_week_day
6
>>> locale.days['format']['wide'][locale.first_week_day]
u'Sunday'

结果发现,下面的方法是行不通的,正如Nate好心指出的那样。如果有人知道原因,请发个帖子告诉大家怎么正确做。这应该可以用标准库来实现。

如果你只想获取今天的日期,可以使用calendar.LocalTextCalendar

>>> import calendar
>>> c = calendar.LocaleTextCalendar(locale='de_DE') # locale=('en_US', 'UTF8') fails too.
>>> c.firstweekday
0

还有一个iterweekdays的方法。

>>> list(c.iterweekdays())
[0, 1, 2, 3, 4, 5, 6]

撰写回答