【问题标题】:Retrieving current local time on iPhone?在 iPhone 上检索当前本地时间?
【发布时间】:2010-10-08 15:39:19
【问题描述】:

我希望获取用户 iPhone 上的当前小时和分钟,以便在不显示状态栏的应用中显示。有没有简单的方法来做到这一点?

【问题讨论】:

  • 你是在创建 iphone web app 还是 iphone app
  • 查看 NSDate、NSDateComponents 和 NSDateFormatter 的文档。
  • Ashutosh Singh:你可以通过标签看出他在谈论一个原生应用。

标签: iphone ios objective-c cocoa-touch


【解决方案1】:
// 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);

【讨论】:

  • +1 应该注意的是,您可以通过将“setTimeStyle”这段代码编辑为“setDateStyle”之类的内容来更改显示日期和月份以及不显示的内容
  • 如果您的 Xcode 项目使用 ARC(2014 年应该默认使用),那么您不需要在 dateFormatter 上调用 release。
【解决方案2】:
-(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 点有问题,所以用 if (hour>=12) { if (hour!=12) hour=hour%12; am_OR_pm = @"PM"; }
  • 请不要这样做。这就是日期格式化程序的用途。
【解决方案3】:
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;

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

【讨论】:

    【解决方案4】:

    请参阅this 类似问题以获得答案。您必须将其更改为您的日期格式。

    [[NSDate date] timeIntervalSince1970];

    【讨论】:

      【解决方案5】:

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

      double currentTime = CACurrentMediaTime();
      

      【讨论】:

        【解决方案6】:

        更短的方法

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

        【讨论】:

          【解决方案7】:

          CFAbsoluteTimeGetCurrent()

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

          【讨论】:

            猜你喜欢
            • 2012-12-17
            • 2011-09-25
            • 2011-12-10
            • 1970-01-01
            • 1970-01-01
            • 2016-01-04
            • 2017-01-19
            • 1970-01-01
            • 2022-11-27
            相关资源
            最近更新 更多