2013-10-08 2 views
0

Я использую ниже код для расчета отметки времени для уведомлений в моноточе. dateAdded параметр DateTime, исходящий от сервера в качестве оповещения. Время, которое находится в UTC формате. Но «время», то есть TimeSpan is getting negative sometimes because dateAdded value is getting greater than DateTime.UtcNow`, что неверно. Итак, как решить эту проблему в monotouch.Дата выпуска выпуска в ios/monotouch

Код:

public static string GetTimeStamp (this DateTime dateAdded) { 
    TimeSpan time = DateTime.UtcNow - dateAdded; 

    if (time.TotalDays > 7) 
     return string.Format ("on {0}", dateAdded.ToLocalTime().ToString ("MMM dd, yyyy 'at' hh:mm tt")); 
    if (time.TotalHours > 24) 
     return string.Format ("about {0} day{1} ago", time.Days, time.Days == 1 ? "" : "s"); 
    if (time.TotalMinutes > 60) 
     return string.Format ("about {0} hour{1} ago", time.Hours, time.Hours == 1 ? "" : "s"); 
    if (time.TotalSeconds > 60) 
     return string.Format ("about {0} minute{1} ago", time.Minutes, time.Minutes == 1 ? "" : "s"); 
    else if (time.TotalSeconds > 10) 
     return string.Format ("about {0} second{1} ago", time.Seconds, time.Seconds == 1 ? "" : "s"); 
    else 
     return "a moment ago"; 
} 
+2

Значение _dateadded становится больше, чем DateTime.UtcNow, что неверно _ "- я бы сначала разрешил эту проблему. – neilco

ответ

0

Вот несколько вещей, чтобы проверить.

  1. DateTime.UtcNow правильный на устройстве?
  2. is dateAdded действительно в UTC?
  3. - ваш сервер дата и время?
  4. является dateAdded.Kind == DateTimeKind.Utc?

Я проверил реализацию DateTime.Subtract() и оператор -, так что (4) не должен иметь никакого влияния, как это соответствует specification:

вычитание (DateTime, DateTime) метод делает не учитывайте значение свойства Kind двух значений DateTime при вычитании . [...]

Так что я подозреваю, что смесь (2) и (3).

+0

Как это проверить на устройстве? 1) DateTime.UtcNow правильно на устройстве? –

+0

'Console.WriteLine (DateTime.UtcNow);' –