readXlsAllReplaceDbでエクセルからのTimestampがうまく入らない。

S2DaoTestCaseを使って、
単体テストを作成。


その際に、期待値をreadXlsAllReplaceDb
を使用して、エクセルから投入している。


ここで、Timestamp型のデータが入るセルを文字列型と定義し、
2008-03-05 17:30:47.0の様にして、初期データの投入しようとすると、
下記エラーが発生する。

org.seasar.framework.exception.ParseRuntimeException: 
[ESSR0050]解析に失敗しました。理由はjava.text.ParseException: Unparseable date: "2008-03-05 17:30:47.0"


どうやら、patternをnullとしてフォーマットかけているようで、
最終的には、yyyy-MM-ddとしてparseしようとするのが原因のようです。


readXlsで取得するだけの場合はちゃんと取得できているだけに残念。
(これはこれで、yyyy/mm/dd hh:mm:ss.Sだと比較でこけるし)


回避法としては、セルをユーザ定義として、yyyy-mm-dd hh:mm:ss.000
と定義すること。ただ、これでも000までなので、厳密には違うんだろうなぁ・・・
そもそも、再度編集かけようとするとミリ秒データ捨てられちゃうし・・・


駄目もとのCAST('日付' AS Timestamp)もダメでした。


また、文字列でも、yyyy/mm/dd hh:mm:ssの形で定義すると、エラーは起こらないが、
日時として解釈され、時間データが切り捨てられる。


データをエクセルに張り付ける前に、すべてのセルを文字列としてから
貼り付けるなんて作業をしている場合にはとっても不便。


さらに、投入データをもとに、期待する結果を作成するしね・・・


環境

              <dependency>
                       <groupId>org.seasar.container</groupId>
                       <artifactId>s2-framework</artifactId>
                       <version>2.4.22</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.container</groupId>
                       <artifactId>s2-tiger</artifactId>
                       <version>2.4.22</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.teeda</groupId>
                       <artifactId>teeda-extension</artifactId>
                       <version>1.0.12</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.teeda</groupId>
                       <artifactId>teeda-ajax</artifactId>
                       <version>1.0.12</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.teeda</groupId>
                       <artifactId>teeda-tiger</artifactId>
                       <version>1.0.12</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.teeda</groupId>
                       <artifactId>teeda-xmlunit</artifactId>
                       <version>0.1.0</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.dao</groupId>
                       <artifactId>s2-dao</artifactId>
                       <version>1.0.47</version>
               </dependency>
               <dependency>
                       <groupId>org.seasar.dao</groupId>
                       <artifactId>s2-dao-tiger</artifactId>
                       <version>1.0.47</version>
               </dependency>
               <dependency>
                       <groupId>com.h2database</groupId>
                       <artifactId>h2</artifactId>
                       <version>1.0.67</version>
               </dependency>

ちなみにOracleXEでも同様。まぁドライバの線は薄いと思ってましたが・・・

見通し

TimestampType#bindValueあたりを書き換えるか、
もしくは、独自コンバータみたいな感じでとうろくできればいけそうなんですが・・・・


でも、こんなレベルの話は、すでに出てきると思うのでもう少し調査か??

関係ないけど

エクセルのユーザ定義型での、月と、分はともに「m」だけどどういうルールで判断してるんだろ??