在iPhone上获取当前本地时间?

32

我想在一个不显示状态栏的应用程序中获取用户iPhone当前的小时和分钟以进行显示。有没有简单的方法做到这一点?


你是在创建 iPhone 网页应用还是 iPhone 应用? - Ashutosh Singh-MVP SharePoint
请查看NSDate、NSDateComponents和NSDateFormatter的文档。 - Kristopher Johnson
6
你可以根据标签看出他在谈论一款本地应用程序。 - Peter Hosey
7个回答

112
// get current date/time
NSDate *today = [NSDate date];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
// display in 12HR/24HR (i.e. 11:25PM or 23:25) format according to User Settings
[dateFormatter setTimeStyle:NSDateFormatterShortStyle];
NSString *currentTime = [dateFormatter stringFromDate:today];
[dateFormatter release];
NSLog(@"User's current time in their preference format:%@",currentTime);

需要注意的是,您可以通过编辑代码中的“setTimeStyle”为“setDateStyle”之类的内容来更改显示天数和月份等内容。 - Albert Renshaw
4
如果您的Xcode项目使用ARC(在2014年默认情况下应该是这样),那么您不需要调用release来释放dateFormatter。 - John Pavley

13
-(void)currentTime
{    
    //Get current time
    NSDate* now = [NSDate date];
    NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    NSDateComponents *dateComponents = [gregorian components:(NSCalendarUnitHour  | NSCalendarUnitMinute | NSCalendarUnitSecond) fromDate:now];
    NSInteger hour = [dateComponents hour];
    NSString *am_OR_pm=@"AM";

    if (hour>12)
    {
        hour=hour%12;

        am_OR_pm = @"PM";
    }

    NSInteger minute = [dateComponents minute];
    NSInteger second = [dateComponents second];
    [gregorian release];

    NSLog(@"Current Time  %@",[NSString stringWithFormat:@"%02ld:%02ld:%02ld %@", (long)hour, (long)minute, (long)second,am_OR_pm]);
}

出现了12 PM的问题,所以用if (hour>=12)进行了修复。 { 如果(hour!=12) hour=hour%12;am_OR_pm = @"PM";} - Francis F
2
请不要这样做。这就是日期格式化器的用途。 - Steven Fisher

12
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeZone:[NSTimeZone localTimeZone]];
NSString *currentTime = [dateFormatter stringFromDate:[NSDate date]]
[dateFormatter release]; dateFormatter = nil;

我认为你应该尝试这个。时区很重要。


10

参见这个类似问题的答案。您需要将其更改为您的日期格式。

[[NSDate date] timeIntervalSince1970];

6

如果您想计算时间间隔,最好使用CACurrentMediaTime


double currentTime = CACurrentMediaTime();

0

一种更简短的方法

NSDate * now = [NSDate date];
timeLabel.text = [NSDateFormatter localizedStringFromDate:now
                                                dateStyle:NSDateFormatterNoStyle
                                                timeStyle:NSDateFormatterShortStyle];

0

CFAbsoluteTimeGetCurrent()

绝对时间是相对于2001年1月1日00:00:00 GMT的绝对参考日期以秒为单位测量的。正值表示参考日期之后的日期,负值表示参考日期之前的日期。例如,绝对时间-32940326等同于1999年12月16日17:54:34。反复调用此函数不能保证单调递增的结果。系统时间可能会因与外部时间参考的同步或时钟的显式用户更改而减少。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接