Вопрос

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

Это было полезно?

Решение

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

Другие советы

Это происходит примерно так:

// 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)

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top