如何在当前时区创建没有小时的日期?

时间:2011-08-13 11:22:55

标签: iphone objective-c xcode cocoa-touch

这个问题是从前一个问题开始的......

How do I create the current date (or any date) as an NSDate without hours, minutes and seconds?

我会使用以下代码...

NSDate *todaysDate = [General makeAbsoluteNSDate:[NSDate date]];

我的问题是我有不同国家/地区的用户,UTC不是他们的时区,而且该功能在一天中的某些时间生成的日期不正确。

如何获取当前时区以更正我的功能? 或者我应该使用不同的方法吗?

继承我一直在使用的功能......

+ (NSDate *)makeAbsoluteNSDate:(NSDate*)datSource {

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:
      NSGregorianCalendar];
[calendar setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];

NSDateComponents *dateComponents = [calendar components:NSYearCalendarUnit | 
                  NSMonthCalendarUnit | NSDayCalendarUnit
                  fromDate:datSource];
[dateComponents setHour:0];
[dateComponents setMinute:0];
[dateComponents setSecond:0];

NSDate *midnightUTC = [calendar dateFromComponents:dateComponents];
[calendar release];

return midnightUTC;
}

1 个答案:

答案 0 :(得分:0)

您可以通过此调用获取时区对象:

[NSTimeZone localTimeZone]

您可以使用 secondsFromGMT 方法找出差异,并使用时区创建日期。

您甚至可以为NSDate构建一个类别,其中包括将日期转换为当前时区日期的方法,这会更简单。