开发者

Date format for 2008-02-01T10:03:23.793-06:00

开发者 https://www.devze.com 2023-01-14 21:14 出处:网络
In my project i am getting \"2008-02-01T10:03:23.793-06:00\" this date format in string i have to convert into NSDate i am using

In my project i am getting "2008-02-01T10:03:23.793-06:00" this date format in string i have to convert into NSDate i am using

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 

NSDate* dateFromStri开发者_如何学编程ng = [dateFormatter dateFromString:@"2008-02-01T10:03:23.793-06:00"];

But when i am print date value using NSLog i am getting value as null.

Please help me out

Thank You


NSDateFormatter* formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
[formatter setLenient:YES];
NSString* buggeredTime = [[sourceDate substringToIndex:26] stringByAppendingString:[sourceDate substringFromIndex:27]];
NSDate* dueDate = [formatter dateFromString:buggeredTime];
[formatter setDateFormat:@"'Time Due: 'hh:mm a  MM/dd/yy"];
NSString* dateString = [formatter stringFromDate:dueDate];
[formatter release];

(Dunno offhand if the setLenient is needed.)


Just use that instead (note the "ZZZ" instead of "Z"):

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];


I think you need to set a locale for the formatter too. Have a look here


Google's GData Objective-C Client has a class (GDataDateTime) that can parse RFC 3339 dates.

http://code.google.com/p/gdata-objectivec-client/source/browse/trunk/Source/Elements/GDataDateTime.m


Here is the swift 4 and up implementation.

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"
var dateFromStr = dateFormatter.date(from: "2008-02-01T10:03:23.793-06:00")!

dateFormatter.dateFormat = "hh:mm:ss a 'on' MMMM dd, yyyy"
//Output: 12:16:45 PM on January 01, 2000

dateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"
//Output: Sat, 1 Jan 2000 12:16:45 +0600

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
//Output: 2000-01-01T12:16:45+0600

dateFormatter.dateFormat = "EEEE, MMM d, yyyy"
//Output: Saturday, Jan 1, 2000

dateFormatter.dateFormat = "MM-dd-yyyy HH:mm"
//Output: 01-01-2000 12:16

dateFormatter.dateFormat = "MMM d, h:mm a"
//Output: Jan 1, 12:16 PM

dateFormatter.dateFormat = "HH:mm:ss.SSS"
//Output: 12:16:45.000

dateFormatter.dateFormat = "MMM d, yyyy"
//Output: Jan 1, 2000

dateFormatter.dateFormat = "MM/dd/yyyy"
//Output: 01/01/2000

dateFormatter.dateFormat = "hh:mm:ss a"
//Output: 12:16:45 PM

dateFormatter.dateFormat = "MMMM yyyy"
//Output: January 2000

dateFormatter.dateFormat = "dd.MM.yy"
//Output: 01.01.00

//Output: Customisable AP/PM symbols
dateFormatter.amSymbol = "am"
dateFormatter.pmSymbol = "Pm"
dateFormatter.dateFormat = "a"
//Output: Pm

// Usage
var timeFromDate = dateFormatter.string(from: dateFromStr)
print(timeFromDate)


2020 Update


It turns out that updates to the NSDateFormatter make to code from the original answer work as expected, when back in 2010 it would fail to parse

Objective-C:

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 

NSDate* dateFromString = [dateFormatter dateFromString:@"2008-02-01T10:03:23.793-06:00"];

Swift:

let dateFormatter = DateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let dateFromString = dateFormatter.date(from: "2008-02-01T10:03:23.793-06:00")

Original answer from 2010


NSDateFormatter won't be able to parse it, because the timezone doesn't conform with RFC 822 or GMT standard. The problem is on the last ":" to have it you need the "GMT".

The date that you have respects the RFC 3339.

You will need to use a NSFormatter to parse it. You should use getObjectValue:forString:errorDescription:

Set the string @"yyyy-MM-dd'T'HH:mm:ss.SSSZ".

0

精彩评论

暂无评论...
验证码 换一张
取 消