-
sqlite中存放的NSDate的时候,存放的是一个小数点后 6位的 浮点数字,表示的是 NSTimeInterval(以秒计算)
coredata存储NSDate时,在内部是存储了字参考时间以来的NSTimeInterval(以 秒 计算),而这个参考时间根据apple dateandtimes doc, NSDate computes time as seconds relative to an absolute reference time: the first instant of January 1, 2001 GMT ,其实参考日期是2001.1.1,而非1970年1月1日,因此有些语言在直接读取coredata NSDate属性的sqlite Timestamp字段并转换成日期后,与原来存储的日期不一样了。
- 把字符串转换成NSDate
- +(NSDate *)NSStringDateToNSDate:(NSString *)string {
- NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
- [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
- //#define kDEFAULT_DATE_TIME_FORMAT (@"yyyy-MM-dd HH:mm:ss'Z'")
- [formatter setDateFormat:kDEFAULT_DATE_TIME_FORMAT];
- NSDate *date = [formatter dateFromString:string];
- [formatter release];
- return date;
- }
- NSDate * date = [NSDate date] ; 这个语句中的 date 变量,不需要 使用 [date release]; 否则会引起内存泄露。
- 获取 北京时区的时间
缺省获得的时间是 +000 时区的。和北京时间 相差8个小时。
可以通过如下代码获得 北京时区的时间
+(NSDate *) localeDateTime { NSDate * seldate = [NSDate date]; NSTimeZone *zone = [NSTimeZone systemTimeZone]; NSInteger interval = [zone secondsFromGMTForDate: seldate]; NSDate * date = [seldate dateByAddingTimeInterval: interval]; return date; }
- 把当前的时间 转换成 字符串
+(NSString *) localDateTimeString { NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease]; [formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; [formatter setDateFormat:kDEFAULT_DATE_TIME_FORMAT]; NSDate *now = [Tools localeDateTime]; return [formatter stringFromDate: now]; }