0

サーバーはUTC形式の日付と時刻を提供します。

2012-11-28T10:32:15+01:00

UTCは次のようにフォーマットされます:2012-11-28 10:32:15 現在の実際の現地日時は2012-11-28 11:32:15

utc形式をデータベースに保存し、後でUIに表示する前に、ユーザーのローカルの日付と時刻に変換したいと思います。私は次のコードを書きました。しかし、時間オフセットは間違っています。時間オフセットは+1時間ですが、UTC時間に1時間ではなく2時間を追加します。

NSDateFormatter *utc = [[NSDateFormatter alloc] init];
[utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[utc setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *dtUTC = [utc dateFromString:@"2012-11-28 10:32:15"];

double i =[[NSTimeZone systemTimeZone] secondsFromGMTForDate:[NSDate date ]];

NSDateFormatter *dfLocal = [[NSDateFormatter alloc] init];
[dfLocal setDateFormat:@"yy-MM-dd HH:mm:ss"];
[dfLocal setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:i]];
NSDate *localDateTime= [dtUTC dateByAddingTimeInterval:i];
NSString *time =[dfLocal stringFromDate:localDateTime];
NSLog(@"original UTC %@  now local: %@", dtUTC, time);

およびログ:

time offset : 1.000000
original UTC 2012-11-28 10:32:15 +0000  now local: 12-11-28 12:32:15

それはあるべきですが、 私が間違っていること2012-11-28 11:32:15を与え ますか?2012-11-28 12:32:15

4

3 に答える 3

1

質問を投稿したらOKです。私は解決策を見つけました。その魔法!

NSDateFormatter *utc = [[NSDateFormatter alloc] init];
[utc setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];
[utc setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate *dtUTC = [utc dateFromString:@"2012-11-28 10:32:15"];

NSDateFormatter *dfLocal = [[NSDateFormatter alloc] init];
[dfLocal setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[dfLocal setTimeZone:[NSTimeZone localTimeZone]];

NSString *time =[dfLocal stringFromDate:dtUTC];
NSLog(@"original UTC %@  now local: %@", dtUTC, time);

およびログ:

time offset : 1.000000
original UTC 2012-11-28 10:32:15 +0000  now local: **2012-11-28 11:32:15**

助けてくれてありがとう

于 2012-11-28T11:09:55.277 に答える
0

この行を変更します

[dfLocal setDateFormat:@"yy-MM-dd HH:mm:ss"];

と置き換えます

 [dfLocal setDateFormat:@"yyyy-MM-dd HH:mm:ss"];

ハッピーコーディング。!!!!!

于 2012-11-28T11:01:15.547 に答える
0

このコードも試してください..

NSTimeZone* currentTimeZone = [NSTimeZone localTimeZone];
NSTimeZone* utcTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"UTC"];

NSDate *dtUTC = [utc dateFromString:@"2012-11-28 10:32:15"];

NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:sourceDate];
NSInteger gmtOffset = [utcTimeZone secondsFromGMTForDate:sourceDate];
NSTimeInterval gmtInterval = gmtOffset - currentGMTOffset;

NSDateFormatter *dfLocal = [[NSDateFormatter alloc] init];
[dfLocal setDateFormat:@"yy-MM-dd HH:mm:ss"];
NSDate* localDateTime = [[[NSDate alloc] initWithTimeInterval:gmtInterval sinceDate:dtUTC] autorelease];
NSString *time =[dfLocal stringFromDate:localDateTime];
NSLog(@"original UTC %@  now local: %@", dtUTC, time);

これがお役に立てば幸いです...

于 2012-11-28T11:08:10.653 に答える