String
をDate
にさまざまな形式で変換したい。
例えば、
ユーザーから取得しています
String fromDate = "19/05/2009"; // i.e. (dd/MM/yyyy) format
このfromDate
を"yyyy-MM-dd"
形式のDateオブジェクトとして変換したい
これどうやってするの?
SimpleDateFormat
を見てください。コードは次のようになります。
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
String reformattedStr = myFormat.format(fromUser.parse(inputString));
} catch (ParseException e) {
e.printStackTrace();
}
SimpleDateFormat
クラスを使用します。
private Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = new SimpleDateFormat(format);
return formatter.parse(date);
}
使用法:
Date date = parseDate("19/05/2009", "dd/MM/yyyy");
効率を上げるために、ハッシュマップにフォーマッターを保存することをお勧めします。ハッシュマップは、utilクラスの静的メンバーです。
private static Map<String, SimpleDateFormat> hashFormatters = new HashMap<String, SimpleDateFormat>();
public static Date parseDate(String date, String format) throws ParseException
{
SimpleDateFormat formatter = hashFormatters.get(format);
if (formatter == null)
{
formatter = new SimpleDateFormat(format);
hashFormatters.put(format, formatter);
}
return formatter.parse(date);
}
LocalDate.parse(
"19/05/2009" ,
DateTimeFormatter.ofPattern( "dd/MM/uuuu" )
)
Java.util.Date
、Java.sql.Date
、およびSimpleDateFormat
を含む他の回答は現在では古くなっています。
LocalDate
日時を実行するための最新の方法は、Java.timeクラス、特にLocalDate
を使用することです。 LocalDate
クラスは、時刻およびタイムゾーンのない日付のみの値を表します。
DateTimeFormatter
日付時刻値を表す文字列を解析または生成するには、 DateTimeFormatter
クラスを使用します。
DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );
LocalDate ld = LocalDate.parse( "19/05/2009" , f );
日付時刻オブジェクトを、その値を表す文字列と混同しないでください。日時オブジェクトにはno形式がありますが、文字列にはあります。 LocalDate
などの日時オブジェクトは、その内部値を表すストリングをgenerateできますが、日時オブジェクトとストリングは別個の別個のオブジェクトです。
任意のカスタム形式を指定して、文字列を生成できます。または、Java.timeに自動ローカライズの作業をさせます。
DateTimeFormatter f =
DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL )
.withLocale( Locale.CANADA_FRENCH ) ;
String output = ld.format( f );
コンソールにダンプします。
System.out.println( "ld: " + ld + " | output: " + output );
ld:2009-05-19 |出力:mardi 19 mai 2009
IdeOne.com の実際の動作を参照してください。
Java.time フレームワークは、Java 8以降に組み込まれています。これらのクラスは、 Java.util.Date
、 Calendar
、および SimpleDateFormat
などの厄介な古い レガシー 日時クラスに取って代わります。
メンテナンスモード になった Joda-Time プロジェクトは、 Java.time クラスへの移行を推奨しています。
詳細については、 Oracle Tutorial を参照してください。また、多くの例と説明についてはStack Overflowを検索してください。仕様は JSR 31 です。
Java.timeオブジェクトをデータベースと直接交換できます。 JDBC 4.2 以降に準拠する JDBCドライバー を使用します。文字列やJava.sql.*
クラスは必要ありません。
Java.timeクラスはどこで入手できますか?
ThreeTen-Extra プロジェクトは、追加のクラスでJava.timeを拡張します。このプロジェクトは、Java.timeに将来追加される可能性のある証明の場です。 Interval
、 YearWeek
、 YearQuarter
、および more などの便利なクラスがあります。
文字列の日付をJava.sql.Dateに変換する
String fromDate = "19/05/2009";
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
Java.util.Date dtt = df.parse(fromDate);
Java.sql.Date ds = new Java.sql.Date(dtt.getTime());
System.out.println(ds);//Mon Jul 05 00:00:00 IST 2010
Java.text.SimpleDateFormat
のjavadocsを確認してください。必要なものすべてが説明されています。
SimpleDateFormat
は実際にニーズに対応しますが、さらに、 Joda Time を確認することをお勧めします。これは、明らかにJava 7 。あまり使用していませんが、良いことしか聞いていないので、プロジェクトで日付を広範囲にわたって操作する場合は、検討する価値があるでしょう。
日付をフォーマットして文字列に変換する簡単な方法
Date date= new Date();
String dateStr=String.format("%td/%tm/%tY", date,date,date);
System.out.println("Date with format of dd/mm/dd: "+dateStr);
出力:dd/mm/dd形式の日付:21/10/2015
Date
オブジェクトにはフォーマットなしがあり、これは表現です。日付はString
でお好みの形式で表示できます。
例えば。 「yyyy-MM-dd
」、「yy-MMM-dd
」、「dd-MMM-yy
」など.
これを実現するには、SimpleDateFormat
を使用できます。
これを試して、
String inputString = "19/05/2009"; // i.e. (dd/MM/yyyy) format
SimpleDateFormat fromUser = new SimpleDateFormat("dd/MM/yyyy");
SimpleDateFormat myFormat = new SimpleDateFormat("yyyy-MM-dd");
try {
Date dateFromUser = fromUser.parse(inputString); // Parse it to the exisitng date pattern and return Date type
String dateMyFormat = myFormat.format(dateFromUser); // format it to the date pattern you prefer
System.out.println(dateMyFormat); // outputs : 2009-05-19
} catch (ParseException e) {
e.printStackTrace();
}
これは2009-05-19を出力します