2

クエリ文字列を介してあるページから別のページにDateTimeを渡すWebアプリケーションがあります。IEとFireFoxの両方で問題なく動作していましたが、GoogleChromeで試すたびに例外がスローされていました。プログラムは次の行で窒息しています:

startDateTime = Convert.ToDateTime(Request.QueryString["start"]);

そこで、デバッガーを実行したところ、クエリ文字列の値は次のとおりであることがわかりました。

Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time)

私は、Convertが仕事に向いていないと結論し、DateTime.ParseExactを取得してこの獣を飼いならすことに着手しました。しかし、これまでのところ、正しいフォーマット文字列は私にはわかりませんでした。これが私が試したコードです(これは機能しません):

DateTime.ParseExact(Request.QueryString["start"], "ddd MMM dd yyyy HH:mm:ss zzz", CultureInfo.InvariantCulture);

このページは、サードパーティコンポーネント(DayPilotCalendar)によって呼び出されるJavaScriptを介して別のページから呼び出されています。DayPilotCalendarコントロールに設定されている関連プロパティは次のとおりです。

TimeRangeSelectedJavaScript="GB_showPage('Request Magnet Time', '../../../EventAddEdit.aspx?start=' + encodeURIComponent(start) + '&end=' + encodeURIComponent(end))"

フォーマット文字列の何が問題になっていますか?

4

3 に答える 3

4

クエリ文字列に「WedOct032012 08:00:00 GMT-0400(Eastern Daylight Time)」のようなものを渡す代わりに、単に日付のタイムスタンプを渡すことをお勧めしますか?例:new Date()。getTime()。(UTCでの1970年からのミリ秒数)。次に、C#では次のことができます。

var epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
var dt =  epoch.AddMilliseconds(Convert.ToInt64(Request.QueryString["start"]));

解析は必要ありません。

于 2012-10-01T14:54:17.997 に答える
3

フォーマットがセクションをカバーしていない可能性があります(Eastern Daylight Time)。通常の文字列処理メソッドを使用して文字列からそれを解析しParseExact、残りを呼び出してみてください。

編集:Odedが指摘しているようにGMT、リテラルとしてフォーマット文字列にを入力する必要もあります。

"ddd MMM dd yyyy HH:mm:ss 'GMT'zzz"

次の作品:

var input = "Wed Oct 03 2012 08:00:00 GMT-0400 (Eastern Daylight Time)";
var trim = input.Substring(0, input.IndexOf(" ("));
var dt = DateTime.ParseExact(
    trim,
    "ddd MMM dd yyyy HH:mm:ss 'GMT'zzz",
    CultureInfo.InvariantCulture);
于 2012-10-01T14:46:57.303 に答える
0

コードを実行してみました

static void Main(string[] args) {
    Console.WriteLine(DateTime.Now.ToString("ddd MMM dd yyyy HH:mm:ss zzz"));            
    Console.Read();
}

出力は:

2012年10月1日月曜日10:52:20-04:00

したがって、文字列のGMTと(東部夏時間)の部分も解析する必要があると思います

于 2012-10-01T14:53:26.810 に答える