【问题标题】:How to determine the first day of week in python如何在python中确定一周的第一天
【发布时间】:2010-11-24 10:21:38
【问题描述】:

根据语言环境,我需要找到一周的第一天(周日/周一) 在 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 中做到这一点?

【问题讨论】:

标签: python date calendar


【解决方案1】:

我只能弄清楚如何使用 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]

【讨论】:

  • 不幸的是,这也不起作用。使用locale='en_US',它在应该返回6时返回0。
  • 这令人困惑。 0=星期一,6=星期日?想不出我在其他任何地方看到的。也没有多大意义!幸运的是,您应该始终使用常量calendar.SUNDAY 等。
  • @Chris Morgan。如果 ISO 标准将星期一作为一周的第一天,这是有道理的(它是)。这将使 0=Monday 和 6=Sunday。这也是您提到的常量的工作方式,我刚刚检查过。美国的特殊之处在于将星期日作为一周的第一天。此外,除非我遗漏了什么,否则在这里使用常量也不好。我们正在尝试找出哪一天是第一天。
  • 日历模块的文档只说语言环境日历将提供本地名称:您必须自己设置一周的第一天。不是技术上的缺陷,而是误导。
  • 令我惊讶的是,ANSI C 语言环境实现和 POSIX 标准没有定义任何东西来定义它——因为这是 locale 模块所基于的,Python AFAIK 也没有。
【解决方案2】:

此功能似乎python 标准库中缺少,直到并包括(至少)Python 3.1.2。


一些线索:

由于有关这方面的信息通常与系统 l10n 数据一起存储(在 GNU 世界中,这可能是 /usr/share/i18n/locales/ 中的语言环境定义)我的第一反应是使用类似 locale.nl_langinfo() 的东西,但不幸的是,什么都没有就像语言环境模块中的locale.FIRST_WEEKDAY :-(

除了 aaronasterling 提到的 Babel 库之外,我发现 this example of a solution 用于 GNOME 小程序中使用的命名问题。另外值得注意的是the accompanying blog post。

【讨论】:

  • 遗憾的是,popen("locale... 代码只能在类似 GNU (Linux) 的系统上运行。它可能不适用于 BSD 衍生产品,而且根本不适用于 Windows。就像我写的那样,太糟糕了,它还没有在 Python 标准库中:-/
【解决方案3】:

特别是许多欧洲国家/地区的日历现在遵循 ISO 决定,从星期一开始一周。航空公司的时间表也将天数从星期一编号为 1,星期二为 2,星期三为 3,以此类推。

上述规定,星期一应始终是一周的第一天。

【讨论】:

  • 仅给定语言环境,您将如何确定这一点?否则,您必须建立一个表格,列出所有可能的语言环境,并且是一周的第一天。
【解决方案4】:

看看日历模块。可能会派上用场!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多