如何在Python中确定一周的第一天
根据地区设置,我需要找出一周的第一天是星期天还是星期一。在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]