如何在iOS中获取“几天前,几小时前”的时间格式?

时间:2015-10-21 10:31:33

标签: ios objective-c timezone

我想在几小时前,几天前在iOS中获取时间/日期格式。但是我得到了错误的数据。例如,如果时间是:

@RunWith(Suite.class)
@Suite.SuiteClasses({TestA.class, TestB.class})
public class TestSuite {
}

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestA {
    @Test
    public void testA1() {
        System.out.println("testA1");
    }

    @Test
    public void testA2() {
        System.out.println("testA2");
    }
}

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestB {
    @Test
    public void testB1() {
        System.out.println("testB1");
    }

    @Test
    public void testB2() {
        System.out.println("testB2");
    }
}

然后根据下面的代码显示我6小时前。我在php中使用Now()函数来保存时间/日期,以便我如何显示不同国家的确切时间?

2015-10-21 03:43:20

2 个答案:

答案 0 :(得分:8)

一些观察结果:

  1. 首先,如果您使用NSDateComponentsFormatter,例如

    ,则可以大大简化此代码
    NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init];
    formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull;
    formatter.allowedUnits = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay | NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond;
    NSString *elapsed = [formatter stringFromDate:someDate toDate:[NSDate date]];
    

    生成一个字符串,表示两个NSDate对象之间的时间,如下所示:

      

    5年,9个月,20天,3小时,48分钟,56秒

    或者您可以指定最大单位数,它只会显示 n 最大单位数。例如:

    formatter.maximumUnitCount = 2;
    

    这会产生:

      

    5年,10个月

  2. 请注意使用常量,例如NSCalendarUnitYear而不是NSYearCalendarUnit

  3. 如果已用时间已关闭,则最常见的情况是时间字符串中的时区不正确。避免这类问题的最简单方法是确保从服务器收到的字符串处于已知时区(例如GMT)或时间字符串包含时区。我们通常会在Web服务中使用ISO 8601 / RFC 3339日期格式并相应地调整我们的日期格式化程序(请参阅Apple Technical Q&A 1480,其中讨论了一些微妙的问题)。

答案 1 :(得分:-2)

您可以通过以下链接从github使用NSDate + NVTimeAgo类下载, https://github.com/nikilster/NSDate-Time-Ago 我确定它适合你。