Skip to main content
 首页 » 编程设计

python之如何将 Python datetime.datetime.utc time() 转换为 Objc NSDate,然后再转换回来

2025年05月04日23jiqing9006

编辑:基本上,我希望在 UTC 时间,最好通过 ISO-8601 执行此操作:

  1. Python:datetime.datetime ---> ISO-8601 字符串
  2. Python:ISO-8601 字符串 ---> datetime.datetime
  3. Obj-C: NSDate ---> ISO-8601 NSString
  4. Obj-C: ISO-8601 NSString ---> NSDate

这看起来应该很简单,但我似乎无法弄明白。

Python 代码,转换为字符串:

>>> import datetime 
>>> datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S %z") 
'2012-03-08 00:07:31 ' 

请注意,时区信息 %z 被打印为一个空字符串,因为 utcnow() 返回一个naive 日期时间对象。我如何将它变成一个感知并让它像下面这样打印?

'2012-03-08 00:07:31 +0000' 

在 Obj-C 方面:

// This fails and prints (null) since the timezone is missing. 
NSString *pythonDate1 = @"2012-03-07 23:51:58 "; 
NSDate   *objCDate1   = [NSDate dateWithString:pythonDate1]; 
NSLog(@"%@", objCDate1); 
 
// This works, manually adding in the "+0000". 
NSString *pythonDate2 = @"2012-03-07 23:51:58 +0000"; 
NSDate   *objCDate2   = [NSDate dateWithString:pythonDate2]; 
NSLog(@"%@", objCDate2); 

打印输出:

2012-03-07 19:14:47.848 Untitled 3[3912:707] (null) 
2012-03-07 19:14:47.849 Untitled 3[3912:707] 2012-03-07 23:51:58 +0000 

我也不太确定如何从 NSDate 返回到 datetime.datetime 对象。任何帮助是极大的赞赏! :)

请您参考如下方法:

使用 datetime.now(tz)而不是 datetime.utcnow() 会给你一个有意识的日期时间对象。