4

私のプロジェクトでは、「2008-02-01T10:03:23.793-06:00」という文字列の日付形式を取得しています。使用しているNSDateに変換する必要があります。

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"];

しかし、NSLogを使用して日付値を印刷すると、値がnullになります。

私を助けてください

ありがとうございました

4

6 に答える 6

6
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];

(setLenientが必要な場合は、Dunnoをオフハンドにします。)

于 2011-03-04T19:07:04.570 に答える
2

代わりにそれを使用してください(「Z」の代わりに「ZZZ」に注意してください):

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZZZ"];
于 2014-03-04T21:41:49.847 に答える
1

フォーマッターのロケールも設定する必要があると思います。こちらをご覧ください

于 2010-09-01T05:36:54.730 に答える
1

GoogleのGDataObjective-Cクライアントには、RFC 3339の日付を解析できるクラス(GDataDateTime)があります。

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

于 2011-01-28T16:47:51.800 に答える
0

これがSwift4以降の実装です。

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-10-27T03:26:45.247 に答える
-3

2020アップデート


元の回答からのmaketocodeの更新は期待どおりに機能することが判明しましたがNSDateFormatter、2010年に戻ると、解析に失敗していました。

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"];

迅速:

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

2010年からの元の回答


タイムゾーンがRFC822またはGMT標準に準拠していないため、NSDateFormatterはそれを解析できません。問題は最後の「:」にあり、「GMT」が必要です。

あなたが持っている日付はRFC3339を尊重します。

NSFormatterを使用して解析する必要があります。あなたは使用する必要がありますgetObjectValue:forString:errorDescription:

文字列を設定します@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"

于 2010-09-01T05:34:39.657 に答える