0

モノタッチで通知のタイムスタンプを計算するために以下のコードを使用しています。dateAddedパラメータは、フォーマットDateTimeされているnotificationDatetimeとしてサーバーから来ていUTCます。しかし、「時間」、つまり TimeSpan is getting negative sometimes becausedateAdded value is getting greater thanDateTime.UtcNow` は間違っています。では、モノタッチでこの問題を解決する方法。

コード:

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";
}
4

1 に答える 1

0

ここで確認すべき点がいくつかあります。

  1. DateTime.UtcNowデバイス上で正しいですか?
  2. dateAdded は本当に UTC ですか?
  3. サーバーの日付と時刻は正しいですか?
  4. ですかdateAdded.Kind == DateTimeKind.Utc

DateTime.Subtract()および演算子の実装を確認したので、(4) は仕様-に準拠しているため、影響はないはずです。

Subtraction(DateTime, DateTime) メソッドは、減算を実行するときに、2 つの DateTime 値の Kind プロパティの値を考慮しません。[...]

だから私は(2)と(3)の混合を疑っています。

于 2013-10-09T07:05:54.693 に答える