2017-03-23 1 views
0

Das ist meine Zeit Wert in Millisekundenkann nicht korrekte Zeit mit Zeitintervall von Epoche in iOS

UInt64 time = 1490237914000; 

Ich verwende die folgende Methode, um die korrekten Zeit Darstellung

- (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; 
} 

Dies ist, was erhalten ich erhalte von den obigen Code:

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

Dieser Ausgang ist falsch (ich weiß, es ist falsch).

testete ich den gleichen Wert mit 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); 
    } 

ich die richtige Ausgabe bekam diese Codezeile

Time is 10:58 Friday 

Ich versuchte

NSDate *date = [NSDate dateWithTimeIntervalSince1970:timerValue]; 

auf folgendes zu ändern:

NSDate *date = [NSDate dateWithTimeIntervalSinceNow:timerValue]; 

und

NSDate *date = [NSDate dateWithTimeIntervalSinceReferenceDate:timerValue]; 

ich immer noch falsches Ergebnis.

Ich weiß nicht, wo das Problem liegt, denn der Zeitwert ist die Zeit von Epoche, und in Java funktioniert es. Ich muss hier etwas falsch verstehen, aber ich kann es nicht feststellen.

Antwort

0

Ich löste das Problem selbst. Ich habe nur den Wert des Timers um 1000 geteilt.

NSDate * Datum = [NSDate dateWithTimeIntervalSince1970: TimerValue/1000];

und das löst das Problem.

Verwandte Themen