• ベストアンサー

Date型からDate型への変換

Date型の変換について質問です。 Date dt = new Date(); とすると「Thu Jan 25 14:41:33 JST 2007」のような内容のDateオブジェクトが生成されますよね。 これを「2007-01-25 14:41:33.000115」のようにDBでよく使用される形式のDateオブジェクトに変換したいんです。 SimpleDateFormatのformatメソッドを使用して String文字列「2007-01-25 14:41:33.000115」に変換して SimpleDateFormatのparseメソッドを使用すれば 上手くいくかと思ったのですが 「Thu Jan 25 14:48:09 JST 2007」というDateオブジェクトが返されてしまいます。 どのようにすれば期待する動作を実現できるでしょうか? 初歩的な質問かもしれませんが、 有識者の方々ご教授いただけますでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

>現在時刻は"EEE MMM dd HH:mm:ss zzz yyyy" 形式で取得されているため、 ↑はjava.util.Dateのインスタンスですか? であれば、 java.util.DateクラスのgetTimeメソッドでミリ秒を取得して、 そのミリ秒をコンストラクタへのパラメータとして java.sql.Timestampのインスタンスを生成してはどうでしょうか? java.util.Dateのインスタンスでないのであれば、 >SimpleDateFormatのformatメソッドを使用して >String文字列「2007-01-25 14:41:33.000115」に変換して >SimpleDateFormatのparseメソッドを使用すれば >上手くいくかと思ったのですが >「Thu Jan 25 14:48:09 JST 2007」というDateオブジェクトが返されてしまいます。 で取得できたjava.util.Dateのインスタンスからミリ秒を取得して、 …(以下省略)

CoolWolf
質問者

お礼

ご解答有難う御座います。 ご助言のとおり、Dateのインスタンスを Timestamp tmsp = new Timestamp(dt.getTime()); のようにしてtmspをKEYにすることで解決いたしました。 このような未熟者の質問にお時間を割いて頂き、どうも有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.5

Dateが得られているのならば static String getTimeStr(Date d) { SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSSS"); return sdf.format(d); } Dateを得られていないのならば、上記メソッド+ static String parseDate(String datestr) throws ParseException { SimpleDateFormat sdf=new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy",Locale.ENGLISH); Date d=sdf.parse(datestr); return getTimeStr(d); } でうまくいくと思います。 DateのtoStringは固定なので、日付の形式をいろいろ変えたい場合はDateFormatのformat(Date date)メソッドを使うのが一般的です。(DateFormatはabstractなのでSimpleDateFormatのオブジェクトを作るわけですが)

CoolWolf
質問者

お礼

DateFormatについての詳しいご教授有難う御座います。 こういった方法もあるんですね。 参考にさせて頂きます。 このような未熟者の質問にお時間を割いて頂き、皆様どうも有難う御座いました。 これにて質問を締め切らせて頂きます。

全文を見る
すると、全ての回答が全文表示されます。
  • gyazae
  • ベストアンサー率40% (8/20)
回答No.4

根本的な設計の問題になってきますが、以下の対応でいかがでしょうか。 1.でレコードを取得する際に SELECT FOR UPDATE で排他制御を行う。 2.の処理を削除する。 3.を行い、 4.で3の結果と共に最終更新日時を現在時刻で UPDATE する。 5.(明示的にじゃなくてもいいけど)commitを行いロック解除する。 SQLを変更したくなければ、 1.で最終更新日時を取得する際にResultSet.getTimestampを利用する。 2.の処理を削除する。 3.を行い、 4.で1のTimestampを WHERE 句で利用し、3の結果と共に最終更新日時を現在時刻で UPDATE する。 どうしても今の形を残したいのであれば、ANo.3 の方法でいけると思います。

CoolWolf
質問者

お礼

ご解答有難う御座います。 2.の処理を削除することはNGが出ていたので pcbeginnerさんのご解答を参考に致しました。 このような未熟者の質問にお時間を割いて頂き、どうも有難う御座いました。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

>DBでよく使用される形式のDateオブジェクト ってなんのことでしょうか? java.sql.Timestampのことでしょうか? 変換なんてしないで、最初からjava.sql.Timestampのインスタンスを生成すれば良いと思います。 (TimestampについてはJavaDocを見て下さい。) それともDateから変換しないといけないような制約でもあるのでしょうか。

全文を見る
すると、全ての回答が全文表示されます。
  • gyazae
  • ベストアンサー率40% (8/20)
回答No.1

どのような処理を実現したいのでしょうか? 質問を見る限り、根本的に思い違いをされているようです。 java.util.Dateクラスは内部で「Thu Jan 25 14:41:33 JST 2007」形式の文字列を保持しているわけではありません。 toStringメソッドが呼ばれた際、内部データを元に "EEE MMM dd HH:mm:ss zzz yyyy" 形式の文字列を生成しているだけです。 なので、SimpleDateFormatのformat->parseをしても、等しいDateオブジェクトが返ってくるだけです。 「2007-01-25 14:41:33.000115」形式の文字列が必要であれば、その度にフォーマットしてやるか、文字列型として保持しておくしかないでしょう。

CoolWolf
質問者

お礼

解答有難う御座います。 質問はWEBアプリケーションの改修中で行き詰ったところなんですが、 なぜDate型から変換しているのかいいますと、 1.画面初期表示時にTBL01より該当のIDを持つレコードの最終更新日時を取得 2.登録ボタン押下時に、その日時をKEYに最終更新日時が初期表示時から変更されていなければUPDATE   (最終更新日時を現在時刻でUPDATEする) 3.UPDATEされたTBL01のUPDATE後の最新の情報を元に色々と計算処理を行う 4.計算結果を再度TBL01にUPDATEする   (この際に現在時刻をKEYにするべきだが現在時刻はそのままの形式だとTBL01と一致しない) 要するに排他処理なんですが、 もともとはAの画面で1.2.を行って Bの画面で3.4.を行っていたのを Aの画面で1~4をまとめて行うように仕様変更されたもので・・・・。 #もともとの作成者は既におらず、今日初めてソースを見た私に対応が回ってきて。 #まぁよくあることですが。 対応としては ・3の後にTBL01からもう一度、更新日時を取得して4のKEYとする~か ・3の更新に使った現在日時をKEYにUPDATEする~を考えたんですが 現在時刻は"EEE MMM dd HH:mm:ss zzz yyyy" 形式で取得されているため、 TBL01の最終更新日時「yyyy-MM-dd HH:mm:ss.SSSSSS」形式とは合わないんです。 (現在時刻取得処理は共有部品なので変えられません) なので"EEE MMM dd HH:mm:ss zzz yyyy" ⇒ 「yyyy-MM-dd HH:mm:ss.SSSSSS」 とする方法を探していたわけです。 どうにかなりませんでしょうか・・・・

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • JavaのDateクラスについて教えてください.

    下のプログラムを実行すると, Date : Mon Jan 30 15:30:00 JST 2006 となります. 私としては,Apr となることを期待するのですが, おかしいでしょうか? Javaの環境は,jdk1.5.0_05 です. // ここから import java.text.SimpleDateFormat; import java.util.Date; public class DateTest { public static void main(String[] args) throws Exception { String dateStr = "2006/04/30 15:30"; Date date = new SimpleDateFormat("yyyy/MM/DD HH:mm").parse(dateStr); System.err.println("Date : " + date); } }

  • 和暦変換フォーマット用メソッドについて

    private void 生年月日編集(String 生年月日, PrintWriter out) { SimpleDateFormat sdf1 = new SimpleDateFormat(生年月日); sdf1.setLenient(false); Date d = sdf1.parse("20120705", new ParsePosition(0)); SimpleDateFormat sdf2 = new SimpleDateFormat("GGGGyyyy年M月d日", new Locale("ja", "JP", "JP")); System.out.println(sdf2.format(d)); 上記の和暦変換プログラムを フォーマット用メソッドとして和暦変換プログラムを呼び だすようにしたいのですが うまくいきません。 アドバイスよろしくお願いいたします。

    • ベストアンサー
    • Java
  • JSTのDateオブジェクトが作りたい

    「JST」の日付オブジェクトを作りたいのですが、 どうすれば良いでしょうか? java.util.Dateクラスを new Date() でオブジェクトを作ると Thu Jul 23 19:47:50 UTC 2009 と、UTCになってしまいます...。

    • ベストアンサー
    • Java
  • java String型から日付型へ変換

    こんにちは 現在javaのPGで日付チェックを行いたくプログラムを組んでいるのですが、色々なサイトを見ながら以下のようなものを書きました。 しかし、動かすと必ず例外にcatchされていまいます。 なぜ例外処理をされてしまうのか、原因がわかりません。 何がいけないのでしょうか?? ご教授お願いいたします。 import java.util.Date; import java.text.DateFormat; import java.text.SimpleDateFormat; //strbeginDate, strcloseDateはフォームよりString型で受け取ります。 String strbeginDate, strcloseDate; SimpleDateFormat DatebeginDateformat = new SimpleDateFormat("YYYYMMDD"); SimpleDateFormat DatecloseDateformat = new SimpleDateFormat("YYYYMMDD"); Date datebeginDate = DatebeginDateformat.parse( strbeginDate ); Date datecloseDate = DatecloseDateformat.parse( strcloseDate ); intflag = datebeginDate.compareTo(datecloseDate);

    • ベストアンサー
    • Java
  • 日付フォーマットの変換についての質問。

    こんにちは。宜しくお願いします。 現在、String型で受け取った日付の文字列をData型にして、さらに違う日付フォーマットにするプログラミングを書いています。 具体的には、 String型の"Wed, 07 Dec 2005 00:00:00 +0900"を、 Date型の"Wed, 07 Dec 2005 00:00:00 +0900"に変更して、 同じくDate型の、"2005-12-07T00:00:00+09:00"にしたいのです。 今躓いてる点は、String型の日付をDate型に変換する所で、エラーメッセージが、” Unparseable date: "Wed, 07 Dec 2005 00:00:00 +0900"”となっており、コード修正しても上手くいきません。 現時点でのコードを記述しますので、お時間があるときにご教授お願いします。 ---- import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 時間のフォーマット変換テスト。 * */ public class testConvertTime { public static void main(String[] args) throws ParseException { String strPreTime = "Wed, 07 Dec 2005 00:00:00 +0900"; //2005-12-07T03:00:12+09:00 SimpleDateFormat sdf = new SimpleDateFormat(); //日付の出力形式を設定 sdf.applyPattern( "EEE, dd MMM yyyy HH:mm:ss Z" ); //指定したフォーマットで日付が返される Date dat = sdf.parse(strPreTime); //java.util.Date dat = sdf.parse(strPreTime); } }

    • ベストアンサー
    • Java
  • Date型

    下記のコード内で、「20060618」設定して、出力を「2006年6月18日」としたいのですが、やり方がわかりません。わかる人がいましたらよろしくお願いいたします。また、Date型というのはどのような型のことを言うのでしょうか?初心者的な質問だと思いますがよろしくお願いいたします。 import java.util.*; import java.text.*; class Test { public static void main(String[] args) { Date date1 = new Date(); // Date date1 = format.parse("20011010"); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy'年'MM'月'dd'日'"); System.out.println(sdf1.format(date1)); } }

    • ベストアンサー
    • Java
  • Date型へのキャストについて

    VB.NET初心者です。 String型からDate型へキャストをしたいのですが、よそのサイト様を参考にいろいろ試してみたのですが、うまくいかず困っています。どなたか、教えてください。よろしくお願いします。 エラー:『文字列は有効なDateTimeではありません』 Dim str1 As String = "2009/08/01" または Dim str2 As String = "2009/08/01 12:00:00" str2 = str2.substring(0,10).replacce("/","") の形式で取得した値を"yyyy/mm/dd形式で"Date方へキャストしたいのですが.... Dim dt As Date = Date.ParseExact(str, "yyyy/MM/dd", Nothing) Dim dt As Date = Date.parse(str) Dim dt As Date = Ctype(str, Date) など試してみたのですが、#8/1/2009#のように書式がおかしいのですが、どこを直せばよいのでしょうか? Date.ParseExact()でできると思っていたのですが、悩んでいます。よろしくお願いします。

  • VB2010で時刻表記変換

    独学でVB2010Expressを使用しています。 あるCSVからADOを使用してデータを取得し、Accessに転載しているのですが、そのデータで日付と時間のフィールドがあるのですが各々以下のような表示(『2012/04/02』の場合→『20120402』、『12:32:50』の場合→『123250』)なので逆の変換をした上で『2012/04/02 12:32:50』とAccessに格納したいのですが『StringからDoubleに変換できません』的なエラーが出てしまします?(全部String型のつもりなんですが) 色々調べたのですが、うまくいきません。ご教授お願いします。 下記のコードはデータテーブル(DT)に変換前の『日』・『時刻』値をを格納したものを使用しています。 iはFOR NEXTでループさせています。 OleCmd.Parameters.Add("@DateTime", SqlDbType.Date).Value OleCmd.Parameters("@DateTime").Value = Date.Parse(CInt(DT.Rows(i)("日")).ToString("0000/00/00")) + " " + CInt(DT.Rows(i)("時刻")) \ 10000 + ":" + (CInt(DT.Rows(i)("時刻")) Mod 10000) \ 100.ToString("00") + ":" + (CInt(DT.Rows(i)("時刻")) Mod 10000) Mod 100.ToString("00")

  • 日本時間でparseしたい

    質問させてください。 Stringの文字列から、Dateクラスを作成する場合、以下のコードを使用すると思います。 SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd"); try { date1 = format.parse("2000/1/1"); } catch (ParseException e1) { e1.printStackTrace(); } この場合、date1にはUTFでの"2000/1/1"が代入されます。 日本時間での"2000/1/1"を代入させたいのですが、どのようにコードを書けばよいのでしょうか。 どなたかお教えください。よろしくお願いします。

    • ベストアンサー
    • Java
  • C#で型変換

    DataTable T_DATATABLE = new DataTable(); DataRow[] T_DATATABLE_row; DataAdapter adp = new DataAdapter("SELECT id,Date FROM TABLE", CONN); adp.Fill(T_DATATABLE); //データテーブルにidとDateフィールドがあります。 //dtに下記で取得したダータを入れようと思っているのですが、 //System.Datetimeに変換することはできませんと表示されます。 DateTime dt = T_DATATABLE.Rows[0]["Date"]; どのようにすれば、型変換をすることができるでしょうか? string dt = (string)T_DATATABLE.Rows[0]["Date"]; string dt = (string)T_DATATABLE.Rows[0]["Date"].toString; としてもできません・・・ ご教授お願い致します!