SimpleDateFormatクラスで使用できる日付形式は何ですか?


84

SimpleDateFormatクラスで使用できる日付形式について誰かに教えてもらえますか。

私はAPIを試しましたが、満足のいく答えを見つけることができませんでした。どんな助けでも大歓迎です。


3
あなたはどんなフォーマットを求めていますか?必要な要素で構成されるフォーマットを作成する必要があります。
デビッドグラント

3
APIで許可されている任意の形式を作成できます。決定的なリストはありません。
Peter Lawrey 2012年

回答:


140

日付と時刻の形式については、以下で詳しく説明します。

SimpleDateFormat(Java Platform SE 7)-日付と時刻のパターン

あるかもしれませんnあなたはおそらくすることができますフォーマットの数。ex-dd/MM/yyyyまたは、YYYY-'W'ww-uまたは文字を組み合わせて、必要なパターンを実現することもできます。パターン文字は以下の通りです。

  • G -時代指定子(AD)
  • y -年(1996; 96)
  • Y -週年(2009; 09)
  • M -年の月(7月; 7月; 07)
  • w -年の週(27)
  • W -月の週(2)
  • D -年の日(189)
  • d -月の日(10)
  • F -月の曜日(2)
  • E -週の曜日名(火曜日;火曜日)
  • u -週の日数(1 =月曜日、...、7 =日曜日)
  • a -AM / PMマーカー
  • H -1日の時間(0-23)
  • k -1日の時間(1-24)
  • K -午前/午後の時間(0-11)
  • h -午前/午後の時間(1-12)
  • m -分(30)
  • s -秒単位(55)
  • S -ミリ秒(978)
  • z -一般的なタイムゾーン(太平洋標準時; PST; GMT-08:00)
  • Z -RFC 822タイムゾーン(-0800)
  • X -ISO 8601タイムゾーン(-08; -0800; -08:00)

パースします:

2000-01-23T04:56:07.000 + 0000

使用する: new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");


Quoiに感謝します。しかし、日付をEST、IST、gdt、gmtなどのさまざまな標準に変換する方法を教えてください。
abhishek_Mishra 2012年

1
次に、別のロケールで日付を探しています。SimpleDateFormatコンストラクターでロケールを設定できるようにします。SimpleDateFormat formatter = new SimpleDateFormat(pattern, locale);
Subhrajyoti Majumder 2012

OK、それは私が探していたものです..ありがとうQuoi .. :)
Abhishek_Mishra

私はあなたの開放性に感謝します。:)
Subhrajyoti Majumder 2012

1
Zと「Z」を混同しないでください。私はばかだったので、他の誰かが私のようにならないことを願っています。
TiefanJu19年

52

http://www3.ntu.edu.sg/home/ehchua/programming/java/DateTimeCalendar.htmlから取得したサンプルコードをいくつか捨ててみましょう その後、理解するまでさまざまなオプションを試してみることができます。

import java.text.SimpleDateFormat;
import java.util.Date;

public class DateTest {
   public static void main(String[] args) {
       Date now = new Date();

       //This is just Date's toString method and doesn't involve SimpleDateFormat
       System.out.println("toString(): " + now);  // dow mon dd hh:mm:ss zzz yyyy
       //Shows  "Mon Oct 08 08:17:06 EDT 2012"

       SimpleDateFormat dateFormatter = new SimpleDateFormat("E, y-M-d 'at' h:m:s a z");
       System.out.println("Format 1:   " + dateFormatter.format(now));
       // Shows  "Mon, 2012-10-8 at 8:17:6 AM EDT"

       dateFormatter = new SimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
       System.out.println("Format 2:   " + dateFormatter.format(now));
       // Shows  "Mon 2012.10.08 at 08:17:06 AM EDT"

       dateFormatter = new SimpleDateFormat("EEEE, MMMM d, yyyy");
       System.out.println("Format 3:   " + dateFormatter.format(now));
       // Shows  "Monday, October 8, 2012"

       // SimpleDateFormat can be used to control the date/time display format:
       //   E (day of week): 3E or fewer (in text xxx), >3E (in full text)
       //   M (month): M (in number), MM (in number with leading zero)
       //              3M: (in text xxx), >3M: (in full text full)
       //   h (hour): h, hh (with leading zero)
       //   m (minute)
       //   s (second)
       //   a (AM/PM)
       //   H (hour in 0 to 23)
       //   z (time zone)
       //  (there may be more listed under the API - I didn't check)

   }

}

幸運を!


7

java.time

更新

他の質問は時代遅れです。SimpleDateFormat何年も前に現代のjava.timeに取って代わられたようなひどいレガシークラスクラスに。

カスタム

独自のカスタムフォーマットパターンを定義するために、のコードはのコードとDateTimeFormatter似ていますが、まったく同じではありませんSimpleDateFormat。必ずドキュメントを調べてください。そして、StackOverflowで多くの例を検索してください。

DateTimeFormatter f = 
    DateTimeFormatter.ofPattern( 
        "dd MMM uuuu" , 
        Locale.ITALY 
    ) 
;

標準ISO8601

ISO 8601日時値の多くの種類のための標準的な定義フォーマット。これらの形式はデータ交換用に設計されており、マシンで簡単に解析できるだけでなく、文化を超えて人間が簡単に読み取ることができます。

java.timeの生成/文字列を解析するときのクラスは、デフォルトではISO 8601の形式を使用します。toStringparseメソッドを呼び出すだけです。フォーマットパターンを指定する必要はありません。

Instant.now().toString()

2018-11-05T18:19:33.017554Z

UTCの値の場合、 Z、末尾のはUTCを意味し、「Zulu」と発音されます。

ローカライズ

フォーマットパターンを指定するのではなく、java.timeに 自動的にローカライズさせることができます。使用DateTimeFormatter.ofLocalized…メソッドをます。

特定の地域(タイムゾーン)の人々が使用する実時間で現在の瞬間を取得します。

ZoneId z = ZoneId.of( "Africa/Tunis" );
ZonedDateTime zdt = ZonedDateTime.now( z );

角かっこで囲まれたタイムゾーンの名前を追加するために賢明に拡張された標準ISO8601形式でテキストを生成します。

zdt.toString():2018-11-05T19:20:23.765293 + 01:00 [アフリカ/チュニジア]

自動ローカライズされたテキストを生成します。

Locale locale = Locale.CANADA_FRENCH;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDateTime( FormatStyle.FULL ).withLocale( locale );

String output = zdt.format( f );

出力:lundi 5novembre2018à19:20:23 heure normale d'Europe centrale

一般に、ハードコードされたフォーマットパターンに悩まされるよりも、自動ローカライズする方が適切です。


java.timeについて

java.timeフレームワークは、Java8以降に組み込まれています。これらのクラスは面倒古い取って代わるレガシーのような日付時刻クラスjava.util.DateCalendar&を、SimpleDateFormat

詳細については、Oracleチュートリアルを参照してください。そして、StackOverflowで多くの例と説明を検索してください。仕様はJSR310です。

ジョダタイムプロジェクトは、今でメンテナンスモードへの移行をアドバイスjava.timeのクラス。

java.timeオブジェクトをデータベースと直接交換できます。JDBC4.2以降に準拠したJDBCドライバーを使用してください。文字列もクラスも必要ありません。Hibernate5およびJPA2.2はjava.timeをサポートしますjava.sql.*

java.timeクラスはどこで入手できますか?


5

ここでフォーマットを確認してください http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

メイン

System.out.println("date  : " + new classname().getMyDate("2014-01-09 14:06", "dd-MMM-yyyy E hh:mm a z", "yyyy-MM-dd HH:mm"));

方法

 public String getMyDate(String myDate, String returnFormat, String myFormat)
            {
                DateFormat dateFormat = new SimpleDateFormat(returnFormat);
                Date date=null;
                String returnValue="";
                try {
                    date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
                    returnValue = dateFormat.format(date);
                } catch (ParseException e) {
                    returnValue= myDate;
                    System.out.println("failed");
                    e.printStackTrace();
                }

            return returnValue;
            }
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.