如何在iOS中获得正确的当前时间?

时间:2016-05-30 12:44:42

标签: ios objective-c swift time nstimezone

我知道这是重复的问题。我已经回顾了许多答案,但仍然没有得到任何解决方案。

我的问题是, 如果用户手动设置,我怎样才能获得设备时间..?

我实施了一个聊天应用。但在这个应用程序中,我有时间问题。如果用户手动设置了时间,那么我们如何识别它。?

我想获得正确的当前UTC时间。所以使用它,我可以识别设备时间和UTC时间之间的差异。

如果我们使用NSDate *currentDateAndTime = [NSDate date];,那么它只根据设备返回UTC时间,而不是当前的UTC时间。

有没有简单的方法可以找到这个解决方案?

任何帮助都将不胜感激。

6 个答案:

答案 0 :(得分:8)

iOS中没有可靠的时间源。你只需要单调和非单调的时间。

单调时间(或绝对时间)表示从过去的某个任意固定点开始的绝对经过的挂钟时间。 CACurrentMediaTime()mach_absolute_time返回单调时间。

非单调时间表示机器对当前挂钟,时间时间的最佳猜测。随着系统时钟的变化,它可以向前和向后跳跃。 [NSDate date]调用会返回它。

作为选项,您可以从http Date响应标头中获取受信任的日期/时间。然后将它和当前单调时间(CACurrentMediaTime())保存在钥匙串中。 以下是获取当前可信时间的方法:

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

另一种解决方案是使用NTP服务器。

答案 1 :(得分:2)

这可能会解决您的问题

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

答案 2 :(得分:0)

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

这将为您提供GMT参考区的绝对日期和时间。

答案 3 :(得分: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);

答案 4 :(得分:0)

试试这个:

迅速:

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

答案 5 :(得分:-1)

您可以使用此代码获取当前时间: -

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