Objective c 当前日期和时间-NSDate

Objective c 当前日期和时间-NSDate,objective-c,ios,cocoa-touch,Objective C,Ios,Cocoa Touch,我需要显示当前的日期和时间 我用过 NSDate *currentDateNTime = [NSDate date]; 我想要当前的日期和时间(应该显示系统时间而不是GMT时间)。 输出应为NSDate格式,而不是NSString 比如, NSDate *currentDateNTime = [NSDate date]; // Do the processing.... NSDate *nowDateAndTime = .....; // Output s

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

我用过

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

您需要一个NSDateFormatter并调用stringFromDate此方法来获取日期字符串

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

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

使用这种方法

-(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;
}
这可能会让你得到你想要的


我希望这能对你有所帮助。

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

在格林尼治标准时间内完成所有需要的计算,并使用格式化程序进行显示。

值得一读

对于最近来到这里的人来说,有一些有用的资源:

苹果日期和时间编程指南如果你对日期和时间做了任何严肃的事情,一定要阅读它。

NSDate上的有用类别包含大量实用程序,允许基于现有日期生成~new~日期。

还有一个快速版本的分类

你是什么意思<代码>[NSDate date]将为您提供当前时间。你想要什么?这里没有问题。[NSDate date]返回当前日期!我想得到当前的日期和时间。例:2012年5月23日04.50 PMI知道这一点。但我需要它返回系统时间,而不是GMT时间。重复的我不想以字符串形式输出结果。它应该是NSDate。当我尝试将其转换为NSDate(使用
dateFromString
)时,它将显示GMT时间而不是系统时间。因此,如何显示当前日期和时间(不是GMT时间,而是系统时间)如果需要显示,则需要NSString。如何显示NSDate对象?我不打算显示,而是使用NSDate进一步计算当前日期和时间。这是一个糟糕的建议。你不应该手动改变日期来补偿时区。使用
NSDateFormatter
在特定区域显示日期。很抱歉,尽管这是要求的,我还是否决了这个答案。尝试说服提问者放弃这种方法,或者至少警告其他读者他们不想这样做。传递一个看起来不像的日期时间从根本上说是可怕的设计。一种解决方案是使用两个字段(NSDate、NSTimeZone)传递类或结构。如果您必须与无法调整的遗留代码交互,那么您可能需要这样的转换器。将“撒谎”NSDate的使用限制在代码的一小部分;在其他地方使用“时区”结构。在我看来,这是一种非常方便的方法,可以搞乱整个日期和时间处理以及所有日历计算,因为您是在时间上跳跃,而不是切换时区。我怀疑这是否正确,因为似乎没有提及系统时间(当前区域设置),这就是问题所要求的。(如果这确实产生了所需的输出,那么它是如何产生的是非直观的。)准确地说。遗憾的是,没有人对最初的问题发表评论,问OP为什么他们需要做他们说他们需要做的事情——因为考虑到NSDate是时区独立的定义,他们要求的是一个糟糕的设计。获取足够的信息以建议替代方法——或者至少“控制损害”(将其限制在一个小的代码区域内;必要时在其他地方携带时区,以便根据需要格式化)。
-(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;
}