当前日期和时间 - NSDate

时间:2012-05-28 16:28:25

标签: objective-c ios cocoa-touch

我需要显示当前的日期和时间。

我用过;

NSDate *currentDateNTime        = [NSDate date];

我想拥有当前的日期和时间(应该显示系统时间而不是GMT时间)。 输出应采用NSDate格式,而不是NSString

例如

;

    NSDate *currentDateNTime        = [NSDate date];
// Do the processing....

NSDate *nowDateAndTime = .....; // Output should be a NSDate and not a NSString

5 个答案:

答案 0 :(得分:7)

由于所有NSDate都是GMT引用,您可能需要这样: (不要忘记nowDate不会是当前系统的实际日期时间,但它会“移位”,所以如果你使用NSDateFormatter生成NSString,你会看到错误的日期)

NSDate* currentDate = [NSDate date];
NSTimeZone* currentTimeZone = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
NSTimeZone* nowTimeZone = [NSTimeZone systemTimeZone];

NSInteger currentGMTOffset = [currentTimeZone secondsFromGMTForDate:currentDate];
NSInteger nowGMTOffset = [nowTimeZone secondsFromGMTForDate:currentDate];

NSTimeInterval interval = nowGMTOffset - currentGMTOffset;
NSDate* nowDate = [[NSDate alloc] initWithTimeInterval:interval sinceDate:currentDate];

答案 1 :(得分:5)

每个时刻都是世界各地的同一时刻 - 它只是表示为不同时区的不同时钟时间。因此,您无法将日期更改为表示时区中某个时间的其他日期;您必须使用您所在的时区提供的NSDateFormatter。结果字符串是您的位置时钟时间表示的时刻。

在GMT中完成所有需要的计算,只需使用格式化程序进行显示。

答案 2 :(得分:1)

值得一读 using this answer

最近有人来到这里的一些有用的资源:

Apple日期和时间编程指南如果您正在对日期和时间做任何严肃的事情,请阅读它。 Does [NSDate date] return the local date and time?

具有大量实用程序的NSDate上的有用类别允许基于现有日期生成~new_date。 https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/DatesAndTimes/DatesAndTimes.html#//apple_ref/doc/uid/10000039i?language=objc

还有该类别的快速版本 https://github.com/erica/NSDate-Extensions

答案 3 :(得分:0)

你需要一个NSDateFormatter并调用stringFromDate这个方法来获取你日期的字符串。

NSDateFormatter *dateformater = [[NSDateFormatter alloc] init];
[dateformater setDateFormat:@"yyyyMMdd,HH:mm"];
NSString *str = [dateformater stringFromDate: currentDateNTime];

答案 4 :(得分:-1)

使用此方法

-(NSDate *)convertDateToDate:(NSDate *) date
{
    NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
    NSDate *nowDate = [[[NSDate alloc] init] autorelease];
    [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]];
    [formatter setDateFormat:@"yyyy-MM-d H:m:s"];
    NSString * strdate = [formatter stringFromDate:date];
    nowDate = [formatter dateFromString:strdate];
    return nowDate;
}

这可能会让你得到你想要的东西。

我希望你能帮到你。