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

如何在python中确定一周的第一天,python,date,calendar,Python,Date,Calendar,根据区域设置,我需要找到一周的第一天(星期日/星期一) 在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.

根据区域设置,我需要找到一周的第一天(星期日/星期一) 在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实现这一点?

许多欧洲国家的日历,尤其是现在,遵循ISO的决定,从周一开始本周的工作。航空公司的时间表也将从星期一开始的几天记为1天,星期二记为2天,星期三记为3天,以此类推


上面提到周一应该永远是一周的第一天。

我只知道如何利用图书馆做到这一点。可通过
easy\u install
获得

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

正如内特善意地指出的那样,下面的方法是行不通的。如果有人知道原因,请张贴并回答,说明如何正确操作。这在标准库中应该是可行的

如果您只需要一天的数字,那么可以使用
calendar.localtextcendar

>>> 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]

在python 3.1.2之前(至少包括)python标准库中,似乎缺少此功能


一些线索:

由于这方面的信息通常与系统l10n数据一起存储(在GNU世界中,可能是
/usr/share/i18n/locales/
中的locale def),因此我的第一反应是使用类似的内容,但不幸的是没有类似于
locale的内容。在locale模块中,第一个工作日
:-(


除了aaronasterling提到的Babel lib之外,我还发现了GNOME小程序中使用的命名问题。另外值得注意的是。

看看日历模块。这可能会很方便!

如果只考虑区域设置,您将如何确定这一点?否则,您必须构建一个表,列出每个可能的区域设置以及哪一个是它的第一个区域设置一周中的某一天。不幸的是,这也不起作用。使用
locale='en_US'
时,它会返回
0
当它应该返回
6
。这很混乱。0=星期一,6=星期天?我想不出在其他任何地方见过它。这也没有多大意义!幸运的是,你应该总是使用常量
日历。星期天
,etc.@Chris Morgan。如果ISO标准规定星期一为一周的第一天,这是有道理的(事实上是这样的)。这将使0=周一和6=周日。这也是你提到的常量的工作方式,我刚刚检查过。美国的特点是将周日作为一周的第一天。此外,在这里使用常量没有好处,除非我遗漏了什么。我们正试图找出哪一个是第一天。calen的文档dar模块只说区域设置日历将提供本地名称:您必须自己设置一周的第一天。这在技术上没有突破,但具有误导性。令我惊讶的是,ANSI C区域设置实现和POSIX标准没有定义任何东西来定义这一点——而这正是
locale
模块所基于的,nPython也是如此。不幸的是,
popen(“locale…
代码只能在类似GNU(Linux)的系统上工作。它可能不会在BSD派生版本上工作,在Windows上也不会。就像我写的,太糟糕了,它还没有在Python标准库中:-/我看到了这一点,也许我可以自己实现它