EDIT: В принципе, я хочу сделать это, в UTC-время, в идеале через ISO-8601:
Это похоже на то, что это должно быть очень просто, но я не могу понять это.
Код Python, преобразование в строку:
>>> import datetime
>>> datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S %z")
'2012-03-08 00:07:31 '
Обратите внимание, что информация о временной зоне %z
печатается как пустая строка, так как utcnow() возвращает наивный объект datetime. Как мне превратить его в осведомленный и заставить его печатать, как показано ниже?
'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. Любая помощь очень ценится! :)
если вы не хотите иметь дело с объектами часового пояса, и ваше время в UTC, почему бы просто не добавить "Z", определяющий Zulu/Zero до конца, как определено в ISO-8601
>>> datetime.datetime.utcnow().strftime("%Y-%m-%dT%H:%M:%SZ")
'2012-03-08T00:07:31Z'
Если, конечно, Obj-C не поддерживает форматирование ISO-8601...
Или, если вы все еще собираетесь использовать utcnow(), вы можете обмануть и просто добавить +00: 00:
>>> datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S +00:00")
'2012-03-08 00:07:31 +00:00'
Дата и время Python по ISO-8601 Строка:
>>> from datetime import datetime
>>> now = datetime.utcnow()
>>> string = now.strftime("%Y-%m-%dT%H:%M:%S +0000") # Manually specifying ' +0000' since we know we have UTC time.
>>>
>>> string
'2012-03-08T21:19:26 +0000'
ISO-8601 String для даты и времени Python:
>>> from datetime import datetime
>>> string = "2012-03-08T21:19:26 +0000"
>>> time = datetime.strptime(string, "%Y-%m-%dT%H:%M:%S +0000") # Only works for UTC time.
>>>
>>> time
datetime.datetime(2012, 3, 8, 21, 18, 31)
NSDate к ISO-8601 NSString:
NSDate *now = [NSDate date];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"];
[dateFormatter setLocale:locale]; // Using "en_US" for locale ?eliminates/reduces? issues with systems running different locales.
[dateFormatter setTimeZone:timeZone];
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; // Explicitly re-stating default behavior for 10.4+.
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss Z"];
NSString *iso8601String = [dateFormatter stringFromDate:now];
NSLog(@"%@", iso8601String);
2012-03-09T02:44:37 +0000
ISO-8601 NSString для NSDate:
NSString *iso8601String = @"2012-03-09T20:37:49 +0000";
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
NSLocale *locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease];
[dateFormatter setLocale:locale]; // Using "en_US" for locale ?eliminates/reduces? issues with systems running different locales.
[dateFormatter setFormatterBehavior:NSDateFormatterBehavior10_4]; // Explicitly re-stating default behavior for 10.4+.
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss Z"];
NSDate *date = [dateFormatter dateFromString:iso8601String];
NSLog(@"%@", date);
2012-03-09 20:37:49 +0000
Если вы действительно хотите местное время:
import datetime
from pytz import timezone
ET = timezone('US/Eastern')
now = datetime.datetime.now(ET)
now.strftime("%Y-%m-%d %H:%M:%S %z")
если у вас есть db или что-то, что использует utc, тогда:
now = datetime.datetime.utcnow()
ET.localize(now).strftime("%Y-%m-%d %H:%M:%S %z")
Использование datetime.now(tz)
вместо datetime.utcnow()
даст вам известный объект datetime.
Z
, но вместо этого он принимает+0000
и+00:00
.