2016-05-30 30 views
0

私はこれを繰り返し知っています。私は多くの解答を見直しましたが、解決策はまだありませんでした。iOSで正しい現在時刻を取得するにはどうすればよいですか?

私の質問は、 ユーザーが手動で設定した場合、どのように時間を取得できますか?

私は1つのチャットアプリを実装しました。しかし、このアプリでは、私はタイミングの問題があります。ユーザーが手動で時間を設定している場合、どのように識別できるか。

正しいUTC時刻を取得したいと考えています。これを使って、私はデバイス時間とUTC時間の違いを特定することができます。

NSDate *currentDateAndTime = [NSDate date];を使用している場合、現在のUTC時刻ではなく、デバイスに応じたUTC時刻のみが返されます。

このソリューションを見つける簡単な方法はありますか?

ご協力いただければ幸いです。

+0

あなたは、デバイスの時間を信用していない場合は、Webサービスを必要とします。 – Desdenova

+1

...またはNTPサーバー。この回答:http://stackoverflow.com/questions/14964318/how-can-i-get-the-actual-date-and-time-if-the-device-date-and-time-are-inaccurat。 –

答えて

0

用途:NSDate *currentDateAndTime = [NSDate date];

これは、あなたGMT参照ゾーンの絶対日付と時刻を取得します。

+1

タイムゾーンを使用せずに手動で時間を設定している場合、機能しません。 UTC時間のデバイス時間に戻ります。 –

+0

デバイスは常にUTC時間を使用して動作します。時間の表示のみがtimeZoneの精度を使用しますが、表示のみに使用されます。 –

0

使用は、このコードでは、それはこれを試してみてください、あなたに

NSDate * datee = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"]; 
NSString *localDateString = [dateFormatter stringFromDate:currentDate]; 

NSLog(@"%@",localDateString); 
+2

正しい現在時刻を取得したい。現在のUTC時刻ではなく、デバイスの現在時刻を返します。 –

0

を支援します。

SWIFT:

let date = NSDate() 
let dateFormatter = NSDateFormatter() 
let timeZone = NSTimeZone(name: "UTC") 

dateFormatter.timeZone = timeZone 

println(dateFormatter.stringFromDate(date)) 

のObj-C:

NSDate *date = [NSDate date]; 
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *timeZone = [NSTimeZone timeZoneWithName:@"UTC"]; 

[dateFormatter setTimeStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeZone:timeZone];  
NSLog(@"%@", [dateFormatter stringFromDate:date]); 
1

これはあなたの問題を解決する可能性があります

NSDate * date = [NSDate date]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
     NSString *currentTime = [dateFormatter stringFromDate:datee]; 
     NSLog(@"current time is:%@",currentTime); 
7

iOSには信頼できる時刻源はありません。単調で非単調な時間で動作します。

単調数時間(または絶対時間)は、過去の任意の固定小数点からの絶対経過時間を表します。 CACurrentMediaTime()またはmach_absolute_timeは単調な時間を返します。

非単調時間は、現在の壁時計、時間帯の時刻に関するマシンの最良の推測を表します。システムの時刻クロックが変更されると、前後にジャンプできます。 [NSDate date]コールはそれを返します。

オプションで、http:// Dateレスポンスヘッダーから信頼できる日付/時刻を取得できます。次に、それを現在の単調時間(CACurrentMediaTime())でキーチェーンに保存します。ここ は現在、信頼できる時刻を取得する方法である:

last known online time + (CACurrentMediaTime() - saved monotonic time)

別の解決策は、NTPサーバーを使用することです。

-1

あなたは現在の時間を取得するため、このコードを使用することができます: -

スウィフト3

let date = Date() 
let formatter = DateFormatter() 
formatter.timeZone = TimeZone(abbreviation: "GMT+0:00") //Current time zone 
formatter.dateFormat = "HH:MM a" 
let currentTime: String = formatter.stringFromDate(date) 
print("My Current Time is \(currentTime)") 

Result ** 
Output : - "My Current Time is 11:05 AM\n" 
関連する問題