需要星期日作为一周的第一天

Posted

技术标签:

【中文标题】需要星期日作为一周的第一天【英文标题】:Need Sunday as the first day of the week 【发布时间】:2013-06-05 15:31:08 【问题描述】:

我希望星期日为 0,但使用 datetime weeday 方法时为 6:

datetime(2013, 6, 9, 11, 59, 59, 1).weekday()  # this returns 6

我的语言环境是:“en_US.UTF-8”,所以星期日应该为 0(当我在 bash 提示符下运行“语言环境日”时,它正确地将“星期日”显示为一周的第一天)。

$ locale day
Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday

如何让 python 将星期日显示为一周的第一天?

(我正在使用 pandas 时间序列并调用 .date 来获取日期时间。)

【问题讨论】:

首先,bash 与 python 不同。其次,您认为哪些用例具有周序数有用?也许一些上下文会帮助回答你的问题。 恐怕我认为您没有花足够的时间来充实您的问题。它非常轻巧,就像您关心日期时间一样。你问的是熊猫而不是日期时间吗? 取决于您要执行的操作calendar 包可能会有所帮助。在那里你可以配置哪一天是一周的第一天,还有更多...... 【参考方案1】:

试试这个:

(datetime.datetime(2013, 6, 9, 11, 59, 59, 1).weekday() + 1) % 7

【讨论】:

肯定是 +1 而不是 -6 :),你也少了一个括号 是的,真丢脸! ;-) 感谢您的补丁! (-6 也在工作,但不是很合乎逻辑,我同意......) 这似乎有效:weeks = df22.date.map(lambda x: x.week if x.dayofweek == 6 else x.week -1 )【参考方案2】:

而不是通过日期(创建日期时间对象)使用 dayofweek 属性(这会更快):

In [1]: rng = pd.date_range('1/1/2013', periods=72, freq='D')

In [2]: (rng.dayofweek + 1 ) % 7
Out[2]:
array([2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3,
       4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5,
       6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0, 1, 2, 3, 4, 5, 6, 0,
       1, 2, 3], dtype=int32)

您可以将其设为属性:

In [3]: rng.my_dayofweek = (rng.dayofweek + 1 ) % 7

同样你可以计算你自己的一周:

In [4]: rng.my_week = rng.map(lambda x: x.week if x.dayofweek else x.week - 1)

这将作为属性提供给您。

.

datetime.date weekday 方法不是特定于语言环境的,它是硬编码的(这里是它的文档字符串):

返回日期所代表的星期几。Monday == 0 ... Sunday == 6

【讨论】:

是否可以更改 python 的默认工作日以便星期日 == 0? 不在 datetime.dates 工作日方法中。在 pandas 中,您可以轻松编写自己的内容,实际上会更新问题。

以上是关于需要星期日作为一周的第一天的主要内容,如果未能解决你的问题,请参考以下文章

为啥在使用 NSCalendarUnitEra 时 ordinalityOfUnit 使用星期一作为一周的第一天?

来自 HTML5 Intl API 的一周的第一天

Excel中如何计算日期所在的这年的第几周,以周一作为一周的第一天

Bigquery 自定义一周的第一天(默认为星期一)

使用存储过程将星期一计算为一周的第一天

如何在Oracle中生成一周的第一天,一周的最后一天和两个日期之间的周数