如何在Objective-C中将Double值转换为Date值

时间:2011-08-03 13:14:26

标签: iphone objective-c double nsdate

我必须在Objective-C中将Double值转换为Date值 我尝试了很多方法,但我没有得到它。

date=var1/24;

此处var1是一个双精度值,应除以24,并将其作为日期存储到变量日期中。我怎么能用Objective-C做到这一点?

我创建了这样的日期变量:

NSDate *date=[[NSDate alloc]init];
date=(nsdate)var1/24;

我该怎么做?

2 个答案:

答案 0 :(得分:1)

  

它是一个双变量..它将包含最多24个值,它将代表今天的HOURS ..

好的,所以你有一个 relative 值要添加到绝对值。需要额外的工作。

首先,你必须决定“今天是什么?”。是12:01 am?如果是,在哪个时区?格林威治标准时间?别的什么?你知道这一点,因为格林尼治标准时间上午12:01与美国东部时间上午12:01不一样。那么:今天是什么?

一旦你决定从开始测量时间,就必须构建一个代表该时间点的NSDate

例如:

NSDate *rightNow = [NSDate date];
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [calendar components:NSUIntegerMax fromDate:rightNow];

这将为您提供一个NSDateComponents对象,该对象表示相对于日历的时间点。在这种情况下,我们使用“当前日历”(可能是公历,但不一定),默认时区是您当前的时区。如果您需要将其设置为相对于其他时区,则可以创建新的NSTimeZone对象并使用-[NSCalendar setTimeZone:]设置日历的时区(在请求日期组件之前)。

现在您已经拥有了日期组件,我们可以将事情“重置”到适当的时间:

[components setHour:0];
[components setMinute:0];
[components setSecond:0];

然后我们可以将其变回NSDate以使其成为绝对时间点:

NSDate *startingPoint = [calendar dateFromComponents:components];

NOW 我们有自己的起点,可以处理“今天的小时”。首先,我们将创建一个日期组件对象来表示不同的小时数:

NSInteger hourDelta = var1 / 24;
NSDateComponents *delta = [[NSDateComponents alloc] init];
[delta setHour:hourDelta];

现在,我们将这个相对差异添加到我们的绝对开始日期:

NSDate *finalDate = [calendar dateByAddingComponents:delta toDate:startingPoint options:0];

因为我们是好公民,所以我们会清理记忆(除非您使用垃圾收集或使用ARC编译):

[delta release];

一些重要的注释:

  • 所有操作都是通过NSCalendar对象完成的,因为NSCalendar定义了“日”的含义以及“小时”的含义。你认为“一天24小时,一小时60分钟......”,但这不一定是真的。我可以创建自己的日历,一天10小时,一小时10分钟。如果我想,我可以将“日”定义为“地球的一个完整旋转”以外的东西。 NSCalendar定义了所有这些规则。因此,日期的所有相对操作(添加“小时”和“天”或其他)必须通过日历完成。
  • NSDate上的方法与-dateByAddingTimeInterval:类似,但这适用于您处理绝对间隔和相对金额的时候。

答案 1 :(得分:0)

这取决于你想要做什么,但直接演员(nsdate)var1/24肯定工作!!!

Anway,你的变量var1到底代表什么?分钟 ?秒?小时 ?从哪个参考日期?今天? UNIX纪元?它是UNIX时间戳(自1970年1月1日起的秒数)?只是要求“将数字转换为日期”本身并不意味着什么; - )

根据这些问题的答案,您可以使用NSDateComponents生成给出不同日期组件的日期(月,日,小时,分钟,秒......),或者使用dateWithTimeIntervalSince1970从UNIX时间戳创建NSDate。 ..或根据您的需要使用NSDate或NSDateComponents中的任何其他方法。

无论您遇到什么问题,请阅读* Date and TIme Programming Guide !! 一切在这里解释了日期操作;它将包含您回答问题所需的一切。