`
swordinhand
  • 浏览: 312429 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

NSDate与时区

    博客分类:
  • iOS
 
阅读更多
      在iOS开发中,获取当前时间最常用的方法是NSDate *date  = [NSDate date]; 但是这样得到的时间是跟你的系统的时区设置无关的,如果直接用NSLog打印出来,那么打印出来的将是格林威治时间,也就是GMT+0,而我们常用的北京时间是GMT+8,这时候就需要用一个NSDateFormatter来格式化一下,可以按如下的方法设置一个
    NSDateFormatter *df = [[NSDateFormatter alloc] init];
    [df setTimeZone:[NSTimeZone timeZoneWithName:@"Asia/Shanghai"]];
    [df setDateFormat:@"yyyy-MM-dd HH:mm:ss zzz"];

    NSString* localString = [df stringFromDate:date];


       那如果想再换个时区,比如东九区,那就用@"Asia/Tokyo"替换@"Asia/Shanghai"就可以了,如果想得到系统支持的所有时区对应的字符串常量,可以用如下的代码打印出来
    NSArray *zones = [NSTimeZone knownTimeZoneNames];
    for (NSString *zone in zones) {
        NSLog(@"timezone name = %@", zone);
    }

       NSDateFormatter默认的timezone就是systemTimezone,所以如果你只是想使用系统默认的时区,直接跳过设置时区这一步就好了,如果为了让看代码的人明确你使用的是系统默认时区,那么可以使用
   
[df setTimeZone:[NSTimeZone systemTimeZone]]


       NSDate是个不可变对象,不像Java中的Date类可以set各种属性,所以如果你想得到一个日期之前一天或一小时的日期,就必须另外生成一个对象,NSDate类提供了很多通过时间间隔来生成另外一个对象的方法
NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:-60*60*24];
NSDate *anHourAgo = [NSDate dateWithTimeIntervalSinceNow:-60*60];
NSDate *anHourLater = [NSDate dateWithTimeIntervalSinceNow:60*60];

        上面的方法有个很大的问题,就是如果你想得到一个月或者一年之前的日期,因为每年和每月的天数是不确定的,这时候就要用上NSCalendar和NSDateComponents,NSDateComponents就是用来设置时间间隔的,可以设置year, month, week, day, hour,minute,second,nanaosecond等等,比如想得到两个月的日期,就可以用下面的代码
    NSDate *todayDate = [NSDate date];
    NSDateComponents *dateComponents = [[NSDateComponents alloc] init];
    [dateComponents setMonth:2];
    NSDate *later = [[NSCalendar currentCalendar] dateByAddingComponents:dateComponents toDate:todayDate options:0];
    NSLog(@"todayDate: %@", todayDate);
    NSLog(@"afterTwoMonths: %@", later);


        如果想通过一个字符串来生成NSDate,那也要通过NSDateFormatter
    NSString *str = @"2013-12-15 13:13:04";
    NSDateFormatter *df2 = [[NSDateFormatter alloc] init];
    [df2 setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    
    NSDate *dateFromStr = [df2 dateFromString:str];
分享到:
评论

相关推荐

    NSDate转换农历

    `NSDate`对象代表一个特定的日期和时间点,与任何特定的时区无关。它基于一个统一的时间线,即公元1970年1月1日午夜(UTC)以来的秒数。通过`NSCalendar`类,我们可以进行日期的各种操作,如添加、减去时间单位或...

    NSDate时间

    `NSDate`对象不包含任何时区或日历信息,它仅表示一个特定的瞬间。以下是对`NSDate`类及其相关知识点的详细讲解: 1. **创建NSDate对象** - 使用`+dateWithTimeIntervalSince1970:`方法,传入自1970年以来的秒数来...

    swift-NSDate总结NSDateFormatter总结

    在"Date-master"这个项目中,可能包含了更多实用的示例和解决方案,比如如何处理时区差异、如何在不同设备间保持时间同步等。通过深入研究这个项目,开发者能够更全面地理解和掌握Swift中的日期处理技术。

    iOS NSDate资料

    `NSDate`本身不包含时区信息,但可以通过`NSTimeZone`类来处理时区差异。 - **获取系统时区**: ```objective-c NSTimeZone *tz = [NSTimeZone systemTimeZone]; ``` - **获取当前时间距离GMT时间相差的秒数**...

    swift-DateHelper-NSDate在Swift中的便利扩展

    8. **时区处理**:考虑到全球不同地区的时区差异,DateHelper可能提供了处理时区的方法,将日期转换为特定时区的时间。 9. **日期区间操作**:创建和处理日期范围,如计算两个日期之间的所有日期,或判断一个日期...

    ios应用源码之获取全球当前所有时区的当前时间testtimezone 20181210

    1. **`NSTimeZone`类**: `NSTimeZone`提供了与时区相关的功能,包括获取系统默认时区、指定ID获取时区以及获取所有可用的时区。例如,我们可以使用`+ (NSTimeZone *)systemTimeZone;`获取系统时区,`+ (NSTimeZone *...

    iOS时间戳字符串NSDate转化demo.zip

    此外,对于时间戳与NSDate的进一步处理,你可能还会遇到时区、夏令时等问题。例如,当处理不同地区用户的时间时,可能需要使用`-[NSDateFormatter setTimeZone:]`设置时区,确保日期的正确显示。同时,如果你需要...

    NSDate,iphone显示时间,日期的方法集合

    它代表一个绝对时间点,与特定时区无关。本篇文章将深入探讨`NSDate`类以及如何在iPhone应用中显示日期和时间。 首先,创建或获取一个`NSDate`对象通常涉及到日期格式化。`NSDateFormatter`类在这里扮演了关键角色...

    IOS应用源码之获取全球当前所有时区的当前时间TestTimeZone .zip

    在iOS开发中,获取全球当前所有时区的当前时间是一项常见的需求,特别是在构建与时间相关的应用时。这个名为"TestTimeZone"的项目源码提供了一个示例,教我们如何实现这一功能。接下来,我们将深入探讨iOS中处理时区...

    NSDate-RFC1123:NSDate + RFC1123 Swift实现

    在Swift编程语言中,处理时间通常涉及到与网络通信和数据交换相关的任务,特别是在构建Web服务或客户端应用时。`NSDate-RFC1123`是一个针对Swift的实用工具,它扩展了`NSDate`类,提供了对RFC 1123日期时间格式的...

    获取全球当前所有时区的当前时间TestTimeZone功能ios源码.zip

    通过`-[NSTimeZone localDateAndTime]`可以得到一个`NSDate`对象,表示该时区的当前日期和时间。 6. **遍历并显示所有时区的时间**: 遍历`knownTimeZoneNames`数组,为每个时区创建`NSTimeZone`对象,然后获取并...

    很方便的处理 NSDate 对象 iOS

    7. **时区处理**:`NSDate-Extension`也考虑到了时区的影响,提供了在特定时区转换日期的方法。 8. **日期范围操作**:`intervalFromDate:toDate:`方法可以计算两个日期之间的间隔,返回一个`NSTimeInterval`值,这...

    iOS 计算两个时间的间隔,某个时间距离现在的天数

    `daysInterval`将给出目标日期与当前日期之间的天数差。 为了更灵活地处理日期,我们可以使用NSCalendar、NSDateComponents和NSCalendarUnit。例如,如果我们想要在不同日历单位(如年、月、日)上进行计算,可以...

    iOS NSDate中关于夏令时的坑

    iOS NSDate中的夏令时坑 iOS 开发中,处理日期和时间字符串的转换是非常常见的操作。然而,在 NSDate 中存在一个关于夏令时的坑,容易导致日期字符串转换失败。今天,我们就来一起探索这个问题,以及相关的解决方案...

    Time.xcodeproj.zip

    10. **通知与定时器**:`NSDate`常与`NSRunLoop`和`NSTimer`一起使用,用于安排定时任务或触发事件。 在`Time.xcodeproj`这个项目中,开发者可能会演示如何创建`NSDate`对象,处理时间戳,转换时区,格式化日期显示...

    判断当前时间是否在设定好的时间范围内

    然后,我们可以使用`compare:`方法来比较当前时间和设定的开始与结束时间,以判断是否在范围内: ```objc if ([now compare:startTime] != NSOrderedAscending && [now compare:endTime] != NSOrderedDescending) {...

    ios-时间格式转换.zip

    5. **时区转换**:如果涉及到时区转换,工具类可能会有方法来处理`NSTimeZone`,例如将时间从一个时区转换到另一个时区。 6. **日期操作**:可能还包含了对日期的加减操作,如增加或减少天数、小时数等。 7. **...

    新手入门常用的iPhone代码

    本文将围绕一个标题为“新手入门常用的iPhone代码”的主题进行展开,详细介绍其中提及的一些基本操作,包括字符串处理、日期与时间的管理、时区处理以及日历相关的操作等。这些知识点都是iOS开发中非常实用且经常...

    iso8601parser:Objective-C的新增功能,可将ISO 8601字符串转换为NSDate并返回

    该方法将返回NSDate或nil 。 共有六个解析器方法。 包含实际解析器的解析器是-[ISO8601DateFormatter dateComponentsFromString:timeZone:range:] 。 其他五个基于此。 未设置为NULL参数“ outTimeZone ”是指向...

    时间个性化设置

    `NSDate`是Apple的Foundation框架中的一个核心类,用于表示一个特定的日期和时间点,不考虑时区。 1. **时间间隔表示法** 在iOS和macOS开发中,为了实现“刚刚”、“5分钟前”这样的表述,我们需要计算当前时间与...

Global site tag (gtag.js) - Google Analytics