Преобразование даты в формате JSON (тики) в NSDate

objective-c json date-conversion

9035 просмотра

4 ответа

0 Репутация автора

Кто-нибудь знает, как преобразовать дату (тики) JSON в NSDate в Objective-C? Может кто-нибудь выложить какой-нибудь код?

Автор: Zap Источник Размещён: 12.08.2009 01:28

Ответы (4)


3 плюса

39200 Репутация автора

Решение

Я предполагаю здесь, но ваше значение JSON - это количество миллисекунд с 1970 года, верно? Вы можете использовать dateWithTimeIntervalSince1970:метод NSDate для возврата объекта NSDate с правильным временем. Просто убедитесь, что вы преобразовали число миллисекунд JSON в секунды, прежде чем передать его в NSDate - в большинстве мест Cocoa использует NSTimeInterval, который представляет интервал в секундах.

Автор: Marc Charbonneau Размещён: 12.08.2009 01:40

0 плюса

16644 Репутация автора

Вы должны были бы определить локаль клиента, чтобы иметь возможность сделать это, и, если ваш клиент не знает, как это сделать, вероятно, нет особого смысла.

Описание NSDateWithLocale: будет способом, которым вы форматируете его для другой локали. И timeIntervalSince1970 вернется к (секундам) с 1970 года, которые можно умножить на 1000, чтобы получить мс для возврата клиенту. Это все в документации NSDate.

http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSDate_Class/Reference/Reference.html

Автор: AlBlue Размещён: 12.08.2009 07:13

2 плюса

941 Репутация автора

Это выглядит примерно так:

// Input string is something like: "/Date(1292851800000+0100)/" where
// 1292851800000 is milliseconds since 1970 and +0100 is the timezone
NSString *inputString = [item objectForKey:@"DateTimeSession"];

// This will tell number of seconds to add according to your default timezone
// Note: if you don't care about timezone changes, just delete/comment it out
NSInteger offset = [[NSTimeZone defaultTimeZone] secondsFromGMT];

// A range of NSMakeRange(6, 10) will generate "1292851800" from "/Date(1292851800000+0100)/"
// as in example above. We crop additional three zeros, because "dateWithTimeIntervalSince1970:"
// wants seconds, not milliseconds; since 1 second is equal to 1000 milliseconds, this will work.
// Note: if you don't care about timezone changes, just chop out "dateByAddingTimeInterval:offset" part
NSDate *date = [[NSDate dateWithTimeIntervalSince1970:
                 [[inputString substringWithRange:NSMakeRange(6, 10)] intValue]]
                dateByAddingTimeInterval:offset];

https://gist.github.com/726910 )

Автор: Ali Размещён: 03.12.2010 07:21

0 плюса

1270 Репутация автора

В соответствии с этой страницей: http://msdn.microsoft.com/en-us/library/system.datetime.ticks.aspx тики начинаются 1 января 0001 года, поэтому dateWithTimeIntervalSince1970:автоматическая настройка для работы с тиками не производится. Вы все еще можете использовать этот метод, но следует учесть разницу.

Автор: Jason Fuerstenberg Размещён: 26.09.2012 01:48
Вопросы из категории :
32x32