Iphone 如何在Objective-C中将双精度值转换为日期值

Iphone 如何在Objective-C中将双精度值转换为日期值,iphone,objective-c,double,nsdate,Iphone,Objective C,Double,Nsdate,我必须在Objective-C中将双精度值转换为日期值 我试过很多方法,但我不明白 date=var1/24; 这里的var1是一个双精度值,应除以24,并作为日期存储到变量日期中。如何使用Objective-C实现这一点 我创建了日期变量,如下所示: NSDate *date=[[NSDate alloc]init]; date=(nsdate)var1/24; 我该怎么做呢?这取决于你到底想做什么,但是直接扮演(nsdate)var1/24肯定会不起作用 安威,你的变量var1到底代表什

我必须在Objective-C中将双精度值转换为日期值 我试过很多方法,但我不明白

date=var1/24;
这里的
var1
是一个双精度值,应除以24,并作为日期存储到变量日期中。如何使用Objective-C实现这一点

我创建了日期变量,如下所示:

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

我该怎么做呢?

这取决于你到底想做什么,但是直接扮演
(nsdate)var1/24
肯定会不起作用

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

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

无论你的问题是什么,一定要阅读*这里解释了有关日期操纵的所有内容;它将包含回答问题所需的所有内容


这是一个双重变量。。它将包含高达24的值,表示从今天开始的小时数

好的,你有一个相对值,你想把它加到一个绝对值上。需要额外的工作

首先,你必须决定“今天是什么日子?”。是12点01分吗?如果是,在哪个时区?格林尼治标准时间?还有别的吗?你必须知道这一点,因为格林尼治时间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];
现在我们有了起点,可以应付“从今天开始的几个小时”。首先,我们将创建一个date components对象来表示差异的小时数:

NSInteger hourDelta = var1 / 24;
NSDateComponents *delta = [[NSDateComponents alloc] init];
[delta setHour:hourDelta];
现在,我们将此相对差异添加到绝对开始日期:

NSDate *finalDate = [calendar dateByAddingComponents:delta toDate:startingPoint options:0];
因为我们是好公民,我们会清理内存(除非您使用垃圾收集或使用ARC编译):

一些重要注意事项:

  • 所有的操作都是通过
    NSCalendar
    对象完成的,因为
    NSCalendar
    定义了“天”的含义和“小时”的含义。你认为“一天有24小时,一小时有60分钟……”,但这不一定是真的。我可以创建自己的日历,一天10小时,一小时10分钟。如果我愿意,我可以把“一天”定义为“地球的一个完整的自转”。
    NSCalendar
    定义了所有这些规则。因此,日期的所有相关操作(添加“小时”和“天”或其他内容)都必须通过日历完成
  • NSDate
    上有一些方法,比如
    -dateByAddingTimeInterval:
    ,但这是用于处理绝对时间间隔而不是相对金额的

这没有多大意义。什么是var1?1970年以来的分钟数?这是一个双重变量。。它将包含最多24个值,表示从今天开始的小时数。那么为什么不使用
NSDate
类参考文档中的方法呢?特别是
dateWithTimeIntervalSinceNow:
,从现在开始传递一个间隔(以秒为单位)?只需将小时数乘以3600,即可获得要通过的时间间隔参数,单位为秒。请注意,“现在”包括当前时间。你的回答仍然不够精确:你想从“今天0:00:00”或“今天,当前时间”计算小时数吗?如果是从午夜开始,您应该使用NSDateComponents方法-请参阅上面链接的编程指南,所有内容都有详细的解释。例如,将当前日期分解为NSDATE组件(仅年、月和日,无时间信息),然后将“小时”组件更改为
var1/24
,并使用
dateFromComponents:
生成预期的输出日期。
[delta release];