计算具有不同语言环境的两个NSDate之间的时间差

时间:2013-09-23 17:37:24

标签: ios objective-c nsdate nsdateformatter nstimeinterval

我有一个当前的NSString,格式为2010-04-23 00:00:00,然后我试图获取当天的天数。但是,我不确定如何在用户将其语言环境更改为泰国时进行处理。

以下是一些代码。

NSString *start = @"2010-04-23 00:00:00";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
NSDate *date = [formatter dateFromString:start];

//Region Format Thailand
NSDate *today = [[NSDate alloc] init];
NSTimeInterval difference =  [today timeIntervalSinceDate:start];
int numberOfDays = difference / 86400;

处理这种情况的正确方法是什么,所以天数的差异是准确的?

2 个答案:

答案 0 :(得分:0)

日期很复杂。

如果您想要天,小时,分钟,秒的差异,那很简单:将所有内容转换为NSDate,计算以秒为单位的差异,转换为天,小时,分钟,秒。

除此之外,您需要先定义实际需要的结果。今天凌晨1点和晚上11点是同一天,但今天晚上11点和明天凌晨1点是不同的日子 - 即使在第一种情况下,差异是22小时,在第二种情况下仅两小时。所以你必须定义你想要的东西。您必须定义您希望结果为“0天”的情况,并且在这种情况下您希望得到“1天”的结果。

如果您更改时区,某些日期将移至不同的日期,有些日期则不会。

由您来决定您想要的结果。在任何情况下,我都会将所有日期转换为相关时区,提取日期,并计算天数差异。

答案 1 :(得分:-2)

您需要将日期转换为纪元时间。
- (NSTimeInterval)timeIntervalSince1970  

执行此操作后,您可以使用以下代码,以秒为单位查找时差并进行比较  

        NSDate * date1 = [NSDate date];
        NSDate * date2 = [NSDate date];
        NSTimeInterval secs = [date1 timeIntervalSinceDate:date2];

        if(secs< 0)
        {
            的NSLog("少&#34);
        }
        否则if(secs> 0)
        {
            的NSLog("更大&#34);
        }
        否则
        {
            的NSLog(@"相同的&#34);
            返回NSOrderedSame;
        }