C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[3]: SimpleDateFormatの不具合について


(過去ログ 78 を表示中)

[トピック内 5 記事 (1 - 5 表示)]  << 0 >>

■46436 / inTopicNo.1)  SimpleDateFormatの不具合について
  
□投稿者/ T_A~K_A (46回)-(2010/02/03(Wed) 01:51:39)

分類:[Java] 

こんばんは。
T_A~K_Aです。

現在、CSVから取り込んだデータを基に、マスタからデータの取得をしています。
マスタにはデータがちゃんと存在します。

CSVは固定長です。その中には日付が存在します。
DBからマスタを取得したりするのでDate型にキャストしています。
この一週間、デバッグをしているのですが怪しい部分は見つかりません。
正しくCSVから取り込めています。

ただ、ど〜もプログラム内で日付が2010年なのに2000年になってしまうケースが
発生しているのです・・・。
ちなみに自分で作ったPGではありません。オフショアです・・・。
ログとか仕込んで対応しているのですが、再現できません。

調査していたところ、こんな記事を発見しました。

■参考URL
http://www.geocities.co.jp/Playtown/1245/java/unsafe_simple_date_format.html

確かにマルチでインスタンスが立ち上がります。
しかしながら、これはスレッド複数起動時なので関係ないのかなと思っています。
私が今見ているソースは、インスタンスを生成するようになっています。
クラスの中でSimpleDateFormatを2つほどNewしています。

例えばクラスA、Bがあります。
クラスAからクラスBを「B1」「B2」インスタンスを生成します。
「B1」「B2」それぞれSimpleDateFormatが、それぞれNewされます。
この時に、参考URLのような事象が発生する事はあり得るのでしょうか?

ご存知の方がいらっしゃいましたらご教授願います。

※返答が遅れる可能性があります・・・。
 客先でお仕事しているもんで・・・セキュリティ的な・・・。予めご了承願います。

引用返信 編集キー/
■46438 / inTopicNo.2)  Re[1]: SimpleDateFormatの不具合について
□投稿者/ Jitta on the way (545回)-(2010/02/03(Wed) 07:44:48)
2010/02/03(Wed) 07:46:41 編集(投稿者)

どんなデータを渡して、どう解釈させた結果、どういう出力がえられたのか。
それが解らなければ、「なに戯言いってんの!」としか言えません。


Tick だったかは、1990年からの積算だったと思う。2010のつもりで"+10"してたら、2000年になるなぁ。



消し消し


失礼。Java だった。
引用返信 編集キー/
■46442 / inTopicNo.3)  Re[1]: SimpleDateFormatの不具合について
□投稿者/ みきぬ (768回)-(2010/02/03(Wed) 09:29:18)
No46436 (T_A~K_A さん) に返信
> ■参考URL
> http://www.geocities.co.jp/Playtown/1245/java/unsafe_simple_date_format.html
>
Java はよくわからんけど補足
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=38799&forum=12

引用返信 編集キー/
■46499 / inTopicNo.4)  Re[2]: SimpleDateFormatの不具合について
□投稿者/ T_A~K_A (47回)-(2010/02/03(Wed) 23:31:31)
みきぬさん返信ありがとう御座います。

ここのサイトは投票する前に調査して読みました。
結果としてスレッドとインスタンスとの差異が、明確ではなかったので投票させていただきました。

Jitta on the wayさん返信ありがとう御座います。
> どんなデータを渡して、どう解釈させた結果、どういう出力がえられたのか。
> それが解らなければ、「なに戯言いってんの!」としか言えません。
そうですね。具体的に記載します。

まず、CSVは固定長です。

■例(CSV)
20100223XXXXZZZZYYYY
20100223XXXXZZZZYYYY
20100223XXXXZZZZYYYY

1.これをJAVA標準のReader系のオブジェクトで読み込みます。
2.その後、一行ずつsubStringしてメンバ変数へ格納します。
3.それをDTOに設定してDAOでSQLを実行します。この時に、String型をDate型へ変換します。
4.DTO経由で実行結果を取得します。

I/Oはこのような感じです。
マスタに確かに存在するデータが取得できません。

実際には、本番稼動していてサポートセンター経由で開発グループへ通達がきました。
20100103のデータが20000103になっているようです。

引用返信 編集キー/
■46504 / inTopicNo.5)  Re[3]: SimpleDateFormatの不具合について
□投稿者/ やじゅ (1506回)-(2010/02/04(Thu) 07:25:56)
やじゅ さんの Web サイト
2010/02/05(Fri) 00:17:16 編集(投稿者)

No46499 (T_A~K_A さん) に返信
> 20100103のデータが20000103になっているようです。

2000年になってしまうのは、2010年だけなのか2010年以降も同じなのか
当日より過去ならなるのか、当日以降ならなるのか など
データ作成して調べてみるしかないです。


※余談
CSVとは、Comma Separated Valuesでカンマ区切りのことです。
「CSVは固定長です」という表現は、意味は通じるけど、本来は
正しくないです。固定長テキスト(fixed-length Values)です。

オーストラリアと中国で2010年問題があったが、今回の原因とは
関係なさそうです。http://ap.atmarkit.co.jp/bbs/core/club_cafe/18393?page=3
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -