• ベストアンサー

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);

  • 1wase
  • お礼率61% (11/18)
  • Java
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
noname#49428
noname#49428
回答No.1

java.lang.IllegalArgumentException: Illegal pattern character 'Y' エラーをちゃんと読みましょうね。

1wase
質問者

補足

このエラーは、確認したのですが、 "SimpleDateFormat("YYYYMMDD");"の部分がいけないのか、 "DatebeginDateformat.parse( strbeginDate );"の部分がいけないのかがわからないのです。 すみません、とんちんかんでしょうか? ちなみに、"String strbeginDate, strcloseDate"は、YYYYMMDDで変数に格納してあります。

その他の回答 (2)

  • kztk
  • ベストアンサー率53% (59/110)
回答No.3

No.1の方が「エラーを読む」と言われているのは、 Illegal pattern character 'Y' の部分のことです。日本語にすると 不正なパターン文字'Y' ですよね。「YYYY」という表現は使えないんです。 では使えるパターン文字は何なのか?はちゃんとドキュメントに書いてあります。 http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/api/java/text/SimpleDateFormat.html 例外が発生したときは、StackTraceを目を皿のようにして読みましょう。 特に1行目の例外名の右側に書いてあるメッセージは必ず意味を理解しなければなりません。 大概の問題はそこに答えが書いてあります。

1wase
質問者

お礼

はぁぁ、そうゆうことでしたか・・・ 大変ご迷惑おかけしました。 YYYYMMDDの文字列が全部いけない渡し方をしていて、 Yは一番始めにいるからエラーに表示されているのだと思っておりました。 すみません、大変にたすかりました。 本当にありがとうございます。

noname#49428
noname#49428
回答No.2

エラーを"読みました"か? ここに答えが書いてますが。 それでも分からなければ、このエラーの意味を書いてみて下さい。

1wase
質問者

補足

わかりませんので書きます。 このエラーは、渡す引数の値の型などが違うから発生しているのではないのでしょうか? 私が使用したもので引数を渡しているのが " SimpleDateFormat("YYYYMMDD")"と "DatebeginDateformat.parse( strbeginDate )"だったので ("datebeginDate.compareTo(datecloseDate)"はコメントアウトしてもエラー内容が変わらないので今は除きます。) そこがいけないのかと思ったのです。 違いますか?

関連するQ&A

  • 日付フォーマットの変換についての質問。

    こんにちは。宜しくお願いします。 現在、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
  • javaの掲示板について

    投稿日時の取得部分の抜粋なのですが、全てのnew SimpleDateFormatの部分でシンボルが見つからないと言われます。 調べて出てくるところと同じに書いているので、エラーが出てくる原因がわかりません。 変更したり、付け加える点を教えてください。 よろしくお願いします。 import java.sql.*; import java.sql.Timestamp.*; import java.io.*; import java.util.Date.*; import java.text.DateFormat.*; import java.text.SimpleDateFormat.*; import java.util.Vector; public class MessageDao { private static final String DATE_PATTERN = "yyyy.MM.dd HH:mm:ss"; private String date2string(Timestamp timestamp){ SimpleDateFormat sdf = new SimpleDateFormat(DATE_PATTERN); return sdf.format(timestamp); } 投稿メッセージの一覧を取得します public Vector getMessageList() throws Exception { Vector messageList = new Vector(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { conn = this.getConnection(); String sql = "SELECT * FROM MESSAGE_TABLE ORDER BY ID DESC"; pstmt = conn.prepareStatement(sql); rs = pstmt.executeQuery(); while(rs.next()) { Message message = new Message(); Timestamp timestamp = rs.getTimestamp("DATE"); String strDate = new SimpleDateFormat(DATE_PATTERN).format(timestamp); message.setDate(strDate);

    • ベストアンサー
    • Java
  • 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); } }

  • Timestamp型への変換について(Java)

    ユーザから入力された8桁の数値をTimestamp型に変換する、下記のプログラムを作成したのですが、 例えば、"20111031"を入力して実行した時に、 最終的に出力されるデータは"2011-10-31 23:59:59.0"となります。(ミリ秒部分が"0") これを、 "2011-10-31 23:59:59.9"(ミリ秒部分が"9"など)のように、 その日の時刻一杯になるような値に変換するには、 プログラムをどのように修正すれば良いでしょうか? import java.sql.Timestamp; import java.text.DateFormat; import java.text.SimpleDateFormat; public class TimeCheck { public static void main(String[] args) { String inputTime = args[0] + "235959"; DateFormat inDateFormat = new SimpleDateFormat("yyyyMMddHHmmss"); DateFormat outDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { String oldTime = outDateFormat.format(inDateFormat.parse(inputTime)); // Timestamp型に変換 Timestamp newTime = Timestamp.valueOf(oldTime); System.out.print(newTime); } catch (Exception e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • importが分からない

    importが違うせいだと思いますが、コンパイルできるように直してください。 import java.util.Date; import java.text.SimpleDateFormat; import java.util.Locale; public class a {  public static void main (String args[]) {   Date d = calendar.getTime();   SimpleDateFormat f = new SimpleDateFormat("EEE", Locale.JAPANESE);   String s = f.format(d);   System.out.println(s);  } }

  • 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
  • 日付チェックについて。

    文字列の日付妥当性チェックについて、SimpleDateFormat#parseをいままで使っていました。 先日、末尾が英字でも例外が発生しないことに気づきました。 途中に存在するともちろん例外が発生します。 例) public static void main(String[] args) { Date date = null; SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); sdf.setLenient(false); try { date = sdf.parse("2000011a"); // ←例外がスローされない。 // date = sdf.parse("200001a1"); ←例外がスローされる。 } catch (Exception e) { System.out.println("exception"); return; } System.out.println(date); } 末尾に英字があってもOKなのは仕様なのでしょうか? このことがわかった後はparseの前にInteger.parseInt(date)を呼び出して、数字であることをチェックしてから日付妥当性を確認しています。 文字列を分割してCalenderクラスのgetTime()などで妥当性チェックを行うことも可能とは思いますが、どうにも納得できな挙動だったので質問させて頂きました。 グーグル先生に教えてもらおうとしたのですが、このことに触れられているサイトが見当たらず・・・ご存知の方がいらっしゃいましたら教えて頂けないでしょうか。 ※JDKのバージョンは1.4と1.5で確認いたしました。

    • ベストアンサー
    • Java
  • ファイル名を動的に生成したい

    ファイル名を日付とその日の中の通し番号にしたいと思っています。 例えば2009/07/17日だったらファイル名を 20090717+その日の中の通し番号とする。 日付をファイル名にするところまではできたのですが「その日の中の 通し番号とする」部分がわかりませんので教えていただきたいのですが。 import java.text.SimpleDateFormat; import java.util.Date; public class CreateFileName { public static void main(String args[]){ Date date1 = new Date(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd"); //ファイル名は日付とその日の中の通し番号 String fileName = sdf1.format(date1).toString()+".pdf"; System.out.println(fileName); } }

  • 日付処理について

    いつもお世話になっております。 Java初心者です。 以下のとあるサンプルコードを理解しようと思い、調べているんですがAPI仕様などを見ても、どうも理解出来ないんです。 /** * 日付文字列をDateオブジェクトに変換します. */ public static Date stringToDate(String datestr){ Date date = null; try { date = new Date(DateFormat.getInstance().parse(datestr).getTime()); } catch (ParseException e) { } return date; } 引数;2004/11/22 00:00:00 戻り値:2004-11-22 という結果になります。 Javaに慣れてない為、 “date = new Date(DateFormat.getInstance().parse(datestr).getTime());” といったような書き方があると頭がついていけなくなる状態です。 どうか分かりやすいご説明を宜しくお願いします。

    • ベストアンサー
    • Java
  • 文字列を日付に変換でParseException

    文字列を日付に変換するところで、「ParseException: Unparseable date: "2013/08/06"   at java.text.DateFormat.parse(DateFormat.java:335) 」とエラー表示されました。 実際のコーディングは Date sgndate = new Date(); if(!StringUtil.isNull(rs.getString("sgnymd"))){ String lstdaysgn = rs.getString("sgnymd"); lstdaysgn = lstdaysgn.substring(0,4) + "/" + lstdaysgn.substring(5,7) + "/" +                               lstdaysgn.substring(8,10); sgndate = DateFormat.getDateInstance().parse(lstdaysgn); ・・・・・・・・・ここでエラー発生 } どこが悪いのか解りません。 よろしくご教授ください。

    • ベストアンサー
    • Java

専門家に質問してみよう