5

json timespan オブジェクトを解析する方法を知っている人はいますか? UTC タイムスパンを自分のビューに戻し、それをローカル クライアント時間に変換したいのですが、その方法についての参照が見つかりませんでした。

私はmvcを使用しているので、このモデルを持っています:

public class TimeSpanModel
{
    public TimeSpan StartTime { get; set; }

    public TimeSpanModel()
    {
        this.StartTime = DateTime.UtcNow.TimeOfDay;

    }
}

私のコントローラーでは、このモデルを次のようにビューに返します。

public ActionResult GetTimeSpanInfo()
    {
        TimeSpanModel tsm= new TimeSpanModel ();
        return Json(tsm);
    }

ビューから次のように呼び出しています。

$.ajax({
        type: 'POST',
        url: '@Url.Content("~/Controller/GetTimeSpanInfo")',
        success: function (data) {
        alert(data.StartTime);
        var dt = new Date(data.StartTime);
        alert(dt.toString());
        }
    });

しかし、最初のアラート ボックスには [object Object] しか表示されないため、タイムスパンを日付に変換しようとしましたが、2 番目のアラート ボックスでは無効な日付が表示されます。

タイムスパンを文字列に変換し、その文字列を必要のない奇妙な日付と連結して「有効な」日付を作成し、それを現地時間に変換して、そこから時間を抽出する必要がありますか? ?

または、TimeSpans を操作するためのより簡単でエレガントな方法、または datetime 値の時間部分のみを使用する方法はありますか?

助けてくれてありがとう。

PS ローカル時間に変換するためだけに UTCnow 時刻を取得するのはばかげているように思えるかもしれませんが、最終的にはこの UTC 時刻値を db テーブル (time(0) 型) から取得します。上記の方法は、データベースから値を取得してモデルに値を設定した後、この値を処理する方法をテストするための簡単な方法にすぎません。

4

2 に答える 2

2

あなたが見ているの[object Object]は、TimeSpan の JSON 表現がないためです。最も簡単な解決策は、一般的な形式を使用してこれを渡すことです。これはミリ秒です。

public ActionResult GetTimeSpanInfo()
    {
        TimeSpanModel tsm= new TimeSpanModel ();
        return Json(tsm.TotalMilliseconds.ToString());
    }

次のように、Date コンストラクター Date( milliseconds ) を使用して JavaScript で解析します。

$.ajax({
        type: 'POST',
        url: '@Url.Content("~/Controller/GetTimeSpanInfo")',
        success: function (data) {
        alert(data);
        var dt = new Date(data);
        alert(dt.toString());
        }
    });
于 2012-08-07T10:09:55.580 に答える
2

人間が読める文化に依存しない方法の文字列として:

Javascript から

var dateParam = aDate.toUTCString();

C#に

DateTime aDate = DateTime.ParseExact(dateParam, "r", System.Globalization.CultureInfo.InvariantCulture, System.Globalization.DateTimeStyles.None);

そして今 C# から

DateTime formattedDateFromCSharp = aDate.ToString("r");

Javascriptに

var aDate = Date.parse(formattedDateFromCSharp);
于 2012-08-07T22:01:51.380 に答える