■23330 / inTopicNo.4) |
Re[3]: DateTimeフォーマット |
□投稿者/ 魔界の仮面弁士 (809回)-(2008/08/12(Tue) 20:38:51)
|
2008/08/12(Tue) 22:51:47 編集(投稿者)
■No23328 (asuka さん) に返信 >>Microsoft Log Parser で、 >> string query = @"SELECT TO_LOCALTIME(TO_TIMESTAMP(date,time)) as JSTDate, 〜 FROM 〜"; >> LogRecordSet oRecordSet = oLogQuery.Execute(query, oEVTInputFormat); >>のようなクエリを投げるのが手っ取り早いかも。 > このような手法は知りませんでした。 > 確かにこちらの方がよさそうですが、何かしらのDBにテーブルを作ってログを格納する必要があるのでしょうか?
DB 等は不要です。任意のログ(独自形式でも可)を、クエリで問い合わせる事ができるのが 「Log Parser」です。(そのヘルプには、簡易ながら C# からの利用例も記載されています)
COM オブジェクト経由で操作する事も、コマンドラインから実行する事もできます。 出力結果は、CSV や XML への変換、グラフ化、画面(ListView)表示などをサポートしています。
[Log Parser 2.2 日本語版] http://www.microsoft.com/japan/technet/scriptcenter/tools/logparser/default.mspx
[Log Parserを活用する] http://www.atmarkit.co.jp/fwin2k/operation/logparser1/logparser1_01.html http://www.atmarkit.co.jp/fwin2k/operation/logparser2/logparser2_01.html
[eXConn Log Parser フォーラム] http://www.exconn.net/Forums/ShowForum.aspx?ForumID=60
> 僕がやっていたのはW3Cオンリーで、しかも日付と時間を出していないと使えないようです。 ログの途中から、出力される列が変更される事もありますね。 まともに解析しようとすると意外と面倒なので、LogParser を使った方が楽だとは思いますが、 限定された条件下においては、今回の asuka さんの対処方法でも十分かも。
> MessageBox.Show(dtJST); > としているだけなのですが、稀にhhがhで表記されているのを見つけてしまいました。 あれ? C# なのですよね? VB や JScript ではなく。
MessageBox.Show に、DateTime 型(あるいはobject 型)を受け取るオーバーロードは無いので、 DateTime dt = new DateTime(2008, 1, 2, 3, 4, 5, DateTimeKind.Local); MessageBox.Show(dt); //★ などと書いたら、おそらく、CS1502 か CS1503 あたりのコンパイル エラーになるはずですが……。
もしこれが VB であれば、「MessageBox.Show(dt)」の構文でも通りえるのですが、 その場合の結果は、「MessageBox.Show(dt.ToString())」の実行結果と同じになります。
そしてこの場合の日付書式は、コントロールパネルの『地域と言語のオプション』設定に依存します。 この設定画面から、時刻のカスタマイズ形式を確認して、それが "H:mm:ss" になっていれば、 0〜9時台は 1 桁で表示されますが、"HH:mm:ss" になっていれば、常に 2 桁で表示される事になります。
>> string stJST = dtJST.ToString("yyyy-MM-dd hh:mm:ss", CultureInfo.InvariantCulture); > 出来ました・・・ すみません。この部分を書き間違えていました。 string stJST = dtJST.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture); に変更してください。hh は 12 時間表記、HH は 24時間表記になります。
>>>> DateTime dtGMT = Convert.ToDateTime( strReadBuf.Substring(0,19) ); >>>> DateTime dtJST = dtGMT.AddHours(9); 現地時間として取得したいのであれば、 string s = "2008/08/12 01:23:45"; DateTime dt = Convert.ToDateTime(s + " GMT"); だけで済ますこともできます。
こうすると、現地時間(つまり、JST)にて「グリニッジ標準時での1時23分」が取り込まれるので、 AddHours することなく、10時23分という値を得る事ができます。
ただし、Convert.ToDateTime や DateTime.Parse は非効率的なので、できれば DateTime.ParseExact を使った「日付書式を明示指定しての変換」にした方が良いでしょう。
|
|