2

Web サービスに渡そうとしている JavaScript コードがいくつかあります。私の JavaScript コードは、日付を UTC 形式で送信することになっています。ローカルでは、コードを生成した時刻は午後 12 時 30 分 43 秒でした。JavaScript コードを実行すると、次の日付/時刻が生成されました。

2012-06-03T20:30:43.000Z

その日付/時刻は、次のコードから生成されました。

var now = new Date();
var utcDate = new Date(
  now.getUTCFullYear(),
  now.getUTCMonth(),
  now.getUTCDate(),
  now.getUTCHours(),
  now.getUTCMinutes(),
  now.getUTCSeconds()
);

JavaScript から Web サービスに日付/時刻を渡すと、次のようにシリアル化されます。

20120603163043

現時点では、それは私には正しいように見えます。次に、その文字列を取得して、C# で日付/時刻に変換する必要があります。それを行うために、次の C# コードを使用しています。

DateTime _value = DateTime.MinValue;
DateTime.TryParseExact(value, "yyyyMMddHHmmss", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out _value)

それが起こると、私は次の日付/時刻を取得します。 2012 年 6 月 3 日 12:30:43 午後

私は何を間違っていますか?日付/時刻は 2012 年 6 月 3 日 4:30:43 PM になると予想していました

4

3 に答える 3

3

得られる結果は正しいですが、 のKindプロパティを確認してくださいDateTime。に設定されているのではなく、 に設定されていることに気付くでしょUTCLocal

を に設定しDateTimeStyles.AdjustToUniversalて を生成するために使用できます。DateTimeKindUTC

DateTime dateTime;
DateTime.TryParseExact(
    value,
    "yyyyMMddHHmmss",
    CultureInfo.InvariantCulture,
    DateTimeStyles.AssumeUniversal | DateTimeStyles.AdjustToUniversal,
    out dateTime);

ideoneで動作するのを見てください。

于 2012-06-03T16:51:05.667 に答える
1

(webAPI など) を使用してシリアル化するだけの場合、JS はtoISOString非常に便利で互換性があります。

//JAVASCRIPT
var d = new Date();
$toPut.dateTime = d.toISOString();
$toPut.put()

//C#
[Put("/setup/dateTime"), HttpPut]
public HttpResponseMessage SetDateTime([FromBody]DateTime dateTimeSettings )

そうすれば、データ構造を維持し、解析を処理する必要がなくなります。

于 2013-10-21T12:00:03.163 に答える
0

日付パラメーターを UTC 形式で Web サービスに渡し、TryParse メソッドを使用してそれを C# 日付オブジェクトに変換する必要があります。

これを試して:

//Javascript
var now = new Date(); //just like: 'Thu, 21 Mar 2013 12:44:40 GMT'
var utcNowString = now.toUTCString(); //pass this parameter to your web service

これは C# コードです。

DateTime date;
DateTime.TryParse(jsDateString, out date); //parsed as: '21.03.2013 14:44:40' 

お役に立てれば。

于 2013-03-21T12:49:50.043 に答える