在Python中指定没有一天的datetime.date

时间:2016-01-07 01:42:06

标签: python datetime

有没有办法在没有这样的日子的情况下指定datetime.date(year=1900, month=1, day=None)

datetime.date

我有一个没有完整指定日期的数据集(有时只有年份和月份)。我想用- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSString *tokenAsString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""]; [[NSUserDefaults standardUserDefaults] setObject: token forKey:@"deviceToken"]; [[NSUserDefaults standardUserDefaults]synchronize]; } 表示没有耍花招。

2 个答案:

答案 0 :(得分:2)

&#34;美丽胜过丑陋。明确比隐含更好......&#34; - Python's Philosophy

内置datetime.date无法做到这一点。 Python datetime.date没有函数签名,因为它不会设置日期值。也许是因为date没有day(月份)在现实生活中自然不完整。

此外,由于day输入被视为Integer,因此它必须具有值。并且默认的整数值为0将导致日表示错误(尽管计数datetime的内部机制可能会解决它),因为现实生活中的day从1开始。简而言之,{{ 1}}做得相当不错(在使用安全方面) - 与其一致&#34;明确优于隐含哲学&#34; - 通过不让用户在没有指定日期的情况下调用它(即:通过暗示函数签名中需要的内容,就像每个优秀程序员所做的那样)。

但是,只要您觉得烦人或不必要,就可以创建自己的函数包装器。

编辑:

或使用Python自己的包装器:

datetime.date

对我而言,似乎最简单的做法是使用当前内置值monthdate = functools.partial(datetime.date, day=1) #edit by ShadowRanger 作为1。

day

要添加的datetime.date(1900, 1, 1) 非常短

答案 1 :(得分:1)

datetime.date代表格里高利历中的一天。它是不可变的,因此必须在创建它的瞬间知道所有值。如果明确使用构造函数,则无法省略该日期。

  

我有一个没有完整指定日期的数据集

如有必要,

datetime.strptime()会提供默认值:

>>> from datetime import datetime
>>> datetime.strptime('2016-02', '%Y-%m').date()
datetime.date(2016, 2, 1)