【问题标题】:Unable to get correct time with time interval from epoch in iOS无法从 iOS 中的纪元获取正确的时间间隔
【发布时间】:2017-08-15 11:49:00
【问题描述】:

这是我的时间值,以毫秒为单位

UInt64 time = 1490237914000;

我使用以下方法来获得正确的时间表示

- (NSString *)commonRepresentationForTimerValue:(UInt64)timerValue
{
    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timerValue];
    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateComponents *components = [calendar components:(NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitWeekday) fromDate:date];

    NSInteger hour = [components hour];
    NSInteger minute = [components minute];
    NSInteger weekDay = [components weekday];

    NSString *hourString;

    if(hour < 10)
    {
        hourString = [NSString stringWithFormat:@"%@%li", @"0", (long)hour];
    }

    else
    {
        hourString = [@(hour) stringValue];
    }

    NSString *minuteString;

    if(minute < 10)
    {
        minuteString = [NSString stringWithFormat:@"%@%li", @"0", (long)minute];
    }

    else
    {
        minuteString = [@(minute) stringValue];
    }

    NSString *weekDayString;

    switch(weekDay)
    {
        case 1: weekDayString = @"Sunday"; break;
        case 2: weekDayString = @"Monday"; break;
        case 3: weekDayString = @"Tuesday"; break;
        case 4: weekDayString = @"Wednesday"; break;
        case 5: weekDayString = @"Thursday"; break;
        case 6: weekDayString = @"Friday"; break;
        case 7: weekDayString = @"Saturday"; break;
    }

    NSString *timerString = [NSString stringWithFormat:@"%@:%@ %@", hourString, minuteString, weekDayString];

    return timerString;
}

这是我从上面的代码中得到的:

2017-03-23 12:20:02.318 AutoLayoutTest[21746:3371016] Time is 08:06 Tuesday

那个输出不正确(我知道它不正确)。

我用 Java 测试了相同的值

public static void main(String[] args) 
    {
        Long timer = 1490237914000l;

        final Calendar calendar = Calendar.getInstance();
        DateFormat formatter = new SimpleDateFormat("hh:mm");
        calendar.setTimeInMillis(timer);

        String weekDay = null;

        switch (calendar.get(Calendar.DAY_OF_WEEK)) 
        {
            case 0: weekDay = "Sunday"; break;
            case 1: weekDay = "Monday"; break;
            case 2: weekDay = "Tuesday"; break;
            case 3: weekDay = "Wednesday"; break;
            case 4: weekDay = "Thursday"; break;
            case 5: weekDay = "Friday"; break;
            case 6: weekDay = "Saturday"; break;
        }

        System.out.println("Time is " + formatter.format(calendar.getTime()) + " " +  weekDay);
    }

我得到了正确的输出

Time is 10:58 Friday

我试图改变这行代码

NSDate *date = [NSDate dateWithTimeIntervalSince1970:timerValue];

到以下:

NSDate *date = [NSDate dateWithTimeIntervalSinceNow:timerValue];

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timerValue];

我仍然得到不正确的结果。

我不知道问题出在哪里,因为时间值是从纪元开始的时间,在java中它可以工作。我在这里一定有什么误解,但我无法确定。

【问题讨论】:

    标签: java ios nsdate epoch nscalendar


    【解决方案1】:

    我自己解决了这个问题。我只是将计时器的值除以 1000。

    NSDate *date = [NSDate dateWithTimeIntervalSince1970:timerValue/1000];

    这样就解决了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 2019-07-20
      • 2019-02-16
      • 2012-06-06
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多