dateformat
1。日付FORMATの紹介
DateFormatの目的は、「日付/時刻」をフォーマットして解析することです。実際、日付のフォーマットツールです。日付をフォーマットしてから、日付を使用したい文字列に変換するのに役立ちます。ただし、DateFormatのフォーマット日付は機能が制限されており、SimpleDateFormatほど強力ではありません。ただし、DateFormatはSimpleDateFormatの親クラスです。そのため、最初にdateFormatを包括的に理解し、次にSimpleDateFormatを学習します。
DateFormatの関数は、日付をフォーマットすることです。フル、ロング、ミディアム、ショートを含む4つのフォーマットスタイルをサポートします。
(01)dateformat.short
12.13.52または午後3時30分などの数字
(02)dateformat.medium
1952年1月12日など、より長い
(03)DateFormat.Long
1952年1月12日または午後3時30分32分のように
(04)dateformat.full
1952年4月12日火曜日や午後3時30分42分など、完全に指定されています。
DateFormatの定義は次のとおりです
パブリックアブストラクトクラスナンバーフォーマットはフォーマットを拡張します{}
DateFormatの関数インターフェイスのデフォルトコンストラクター:
dateformat()
非建設者:
オブジェクトクローン()boolean等しい(オブジェクトオブジェクト)要約stringbufferフォーマット(日付、ストリングバッファバッファー、フィールドポジションフィールド)最終的なストリングバッファー形式(オブジェクトオブジェクト、ストリングバッファバッファー、フィールドポジションフィールド)最終文字列形式(日付)静的ロケール[] getavailableLelocales()getavailablelocales()calendar getcalendar()最終統計統計統計()最終的スタイル)最終的なstaticFormat getDateInstance(int Style、locale locale)final static dateformat getDateTimeInstance(int Style、locale locale)最終的な静的定義getDateTimeInstance(int Datestyle、int Timestyle)最終静的日付式FORMAT GETDATETIMESSTANCE(INTECTELE)最終的なスタティックデートのgetTeTateTeTateTeTateTATEタイムスタイル、ロケールロケール)Numberformat getNumberFormat()TimeZone getTimezone()int hashcode()boolean islenient()date parse(string)abstract date parse(string string、parsoposition position)object parseobject(string、string、parseposition position poseフォーマット)void setimezone(タイムゾーンタイムゾーン)
注:DateFormatは抽象クラスです。
getInstance()、getDateInstance()、およびgetDateTimeInstance()を介してdateFormatインスタンスを取得すると。実際には、返されたSimpledateFormatオブジェクトです。
次の機能は、実際には返されたSimpledateFormatオブジェクトです。
final static dateformat getInstance()final static dateformat getTimeInstance()final static dateformat getTimeInstance(int Style)最終的な静的デートフォーモットgetTimeInstance(intスタイル、ロケールロケール)最終静的フォーミストラットgetDateInstance()最終静的デートフォーミングインストナンス()最終的なスタチックgetdatance( getDateTimeInstance(int datestyle、int timestyle)最終静的日付Format getDateTimeInstance(int datestyle、int timestyle、locale locale)
これらの関数は、次のようにsimpledateformat.javaで定義されています。
public static final int full = 0; public static final int long = 1; public static final int medium = 2; public static final int short = 3; public static final default = medium; public final static dateformat getInstance(){return getDateTimeInstance(短い、短い); static dateformat getTimeInstance(int style){return get(style、0、1、locale.getDefault());} public static dateformat getTimeInstance(int style、locale alocale){return get(0、1、alocale);} public final static finalformat getdateinstance(){return get() final static dateformat getDateInstance(int style){return get(0、style、2、locale.getDefault());} public final static dateformat getDateInstance(int style、locale alocale){return get(0、style、2、alocale);} public final staticformat getdatimat getdatimeinstance() locale.getDefault());} public final static dateformat getDateTimeInstance(int datestyle、int timestyle){return get(Timestyle、Datestyle、3、locale.getDefault()) alocale);}/*** dateformatインスタンスを取得します。 * *タイムスタイル - 値は「フル」または「長い」または「中程度」または「短い」とすることができます *データスタイル - 値は「完全」または「長い」または「ミディアム」または「短い」 *フラグにすることができます - 値は「1」または「2」または「3」です。 * 1つの「タイムスタイル」を取得することを意味します * 2つの「日付スタイル」を取得することを意味します * 3つの「時間と日付スタイル」を取得することを意味します * loc -localeオブジェクト、「エリア」を表す */private static dateformat get(int timestyle、int flags、locale loc){if((flag&1)!= 0){if(timestyle> | thowmestyle> 3){if <0 | | showmestyle> 3)スタイル " +タイムスタイル); }} else {Timestyle = -1; } if((flags&2)!= 0){if(datestyle <0 || datestyle> 3){新しいIllegalargumentException( "Illegal Style" + Datestyle); }} else {datestyle = -1; } try {//プロバイダーが、Javaランタイム自体が提供できるものよりも//要求されたロケールに近い//を提供できるかどうかを確認します。 loceerserviceproviderpool pool = loceerserviceproviderpool.getPool(dateFormatProvider.class); if(pool.hasproviders()){dateFormat ProviderSinstance = pool.getLocalizedObject(dateFormatgetter.instance、loc、Timestyle、Datestyle、Flags); if(providerSinstance!= null){return providerSinstance; }} new SimpledateFormat(Timestyle、Datestyle、loc)を返します。 } catch(MissingResourceException e){return new simpledateFormat( "m/d/yy h:mm a"); }}上記のコードを使用して、日付形式の関数が日付をフォーマットすることであることをさらに認識できます。日付を必要な文字列に変換するのを手伝ってください。 DateFormatは非常に限られた機能を提供し、フル、ロング、ミディアム、ショートの4つの形式のみをサポートできます。さらに、DateFormatインスタンスを取得すると、実際にはsimpledateformatオブジェクトが返されます。
2。DATEFORMATインスタンス
以下では、例を介して日付形式を使用して一般的に使用されるAPIを学びます。
ソースコードは次のとおりです(dateformattest.java):
java.util.date;インポートJava.util.locale; Import java.text.dateformat; Import java.text.fieldposition;/*** APIテストプログラムの日付class dateformattest {public static void main(string [] args){// // "date"のみを表示します:getDateInstance()function testgetDateInstance(); // "date" + "time"を表示:getDateTimeInstance()function testgetDateTimeInstance()を呼び出します。 // test format()function testformat(); } / ** * getTimeInstance()dateFormatの関数をテスト * 3つのオーバーロードされたフォームがあります: *(01)getTimeInstance() *(02)getTimeInstance(int style) *(03)getTimeInstance(intスタイル、ロケールロケール) * * * @Author skywang * / private testgettimeinstance = uvid testgettimeinstance // locale locale = new Locale( "fr"、 "fr"); locale locale = new Locale( "zh"、 "cn"); // dateformat.getTimeInstance(dateFormat.Medium)に相当します。 dateformat short0 = dateformat.getTimeInstance(); //パラメーターは次のとおりです。「ディスプレイ時間のスタイル」dateFormat short1 = dateformat.getTimeInstance(dateFormat.short); dateformat medium1 = dateformat.getTimeInstance(dateFormat.Medium); dateformat long1 = dateformat.getTimeInstance(dateFormat.Long); dateformat full1 = dateformat.getTimeInstance(dateFormat.full); //パラメーターは次のとおりです。「DateFormat Display Style "および" region "dateformat short2 = dateformat.getTimeInstance(dateFormat.short、locale); dateformat medium2 = dateformat.getTimeInstance(dateformat.medium、locale); dateformat long2 = dateformat.getTimeInstance(dateFormat.Long、locale); dateformat full2 = dateformat.getTimeInstance(dateFormat.full、locale); System.out.println( "/n ---- getTimeInstance ---/n" + "(1.0)empty param:" + short0.format(date) + "/n" + "(2.1)1つのparam(s):" + short1.format(date) + "/n" + "(2.2)one param(m) long1.format(date) + "/n" + "(2.4)1つのparam(f):" + full1.format(date) + "/n" + "(3.1)1つのparam(s、l):" + short2.format(date) + "/n" + "(3.2)one prame(m、l):" + medium2.format(l) + "/n" + " +"(3.3) long2.format(date) + "/n" + "(3.4)1つのparam(f、l):" + full2.format(date) + "/n"); } / ** * getDateTimeInstance()dateFormatの関数をテスト * 3つのオーバーロードされたフォームがあります: *(01)getDateInstance() *(02)getDateInstance(int style) *(03)getDateInstance(intスタイル、ロケールロケール) locale locale = new Locale( "zh"、 "cn"); // DateFormat.getDateTimeInstance(dateFormat.Medium)に相当します。 dateformat short0 = dateformat.getDateTimeInstance(); dateformat short1 = dateformat.getDateTimeInstance(dateFormat.short、dateFormat.short); dateformat medium1 = dateformat.getDateTimeInstance(dateFormat.medium、dateformat.medium); dateformat long1 = dateformat.getDateTimeInstance(dateFormat.Long、dateFormat.Long); dateformat full1 = dateformat.getDateTimeInstance(dateFormat.full、dateFormat.full); dateformat short2 = dateformat.getDateTimeInstance(dateformat.short、dateformat.short、locale); dateformat medium2 = dateformat.getDateTimeInstance(dateFormat.medium、dateformat.medium、locale); dateformat long2 = dateformat.getDateTimeInstance(dateFormat.Long、dateFormat.Long、locale); dateformat full2 = dateformat.getDateTimeInstance(dateFormat.full、dateFormat.full、locale); System.out.println( "/n ---- getDateTimeStance ---/n" + "(1.0)空のparam:" + short0.format(date) + "/n" + "(2.1)1つのparam(s):" + short1.format(date) + "/n" + "(2.2)1つのparam(2.2) " + long1(date) +"/n " +"(2.4)1つのparam(f): " + full1.format(date) +"/n " +"(3.1)1つのparam(s、l): " + short2.format(date) +"/n " +"(3.2)1つlong2.format(date) + "/n" + "(3.4)1つのparam(f、l):" + full2.format(date) + "/n"); } / ** * getDateInstance()dateFormatの関数をテスト * 3つのオーバーロードフォームがあります: *(01)getDateTimeInstance() *(02)getDateTimeInstance(int Datestyle、int Timestyle) *(03)getDateTimeInstance(int DateStyle、int timestyle、boid eatdced * / pucition Sitdated * / putic date = new date(); // locale locale = new Locale( "en"、 "us"); locale locale = new Locale( "zh"、 "cn"); // dateformat.getDateInstance(dateFormat.Medium)に相当します。 dateformat short0 = dateformat.getDateInstance(); dateformat short1 = dateformat.getDateInstance(dateformat.short); dateformat medium1 = dateformat.getDateInstance(dateformat.medium); dateformat long1 = dateformat.getDateInstance(dateFormat.Long); dateformat full1 = dateformat.getDateInstance(dateFormat.full); dateformat short2 = dateformat.getDateInstance(dateformat.short、locale); dateformat medium2 = dateformat.getDateInstance(dateformat.medium、locale); dateformat long2 = dateformat.getDateInstance(dateFormat.Long、locale); dateformat full2 = dateformat.getDateInstance(dateformat.full、locale); System.out.println( "/n ---- getDateInstance ---/n" + "(1.0)empty param:" + short0.format(date) + "/n" + "(2.1)(s):" + short1.format(date) + "/n" + "(2.2)1つのparam(m) long1.format(date) + "/n" + "(2.4)1つのparam(f):" + full1.format(date) + "/n" + "(3.1)1つのparam(s、l):" + short2.format(date) + "/n" + "(3.2)one prame(m、l):" + medium2.format(l) + "/n" + " +"(3.3) long2.format(date) + "/n" + "(3.4)1つのparam(f、l):" + full2.format(date) + "/n"); } / *** test dateformat format()function* / public static void testformat(){date date = new date(); stringbuffer sb = new StringBuffer(); fieldposition field = new fieldposition(dateformat.year_field); dateformat format = dateformat.getDateTimeInstance(); sb = format.format(date、sb、field); System.out.println( "/ntestformat"); System.out.printf( "sb =%s/n"、sb); }}実行結果:
--- getTimeInstance - (1.0)空のパラマ:4:54:22 PM(2.1)1つのパラマ(2.2):4:54 PM(M):4:54:22 PM(2.3)1つのパラメーション(L):4:54:22 PM CST(2.4)1つのパラマCST(3.1)1つのPARAM(s、l):4:54(3.2)1つのパラメーション(m、l):16:54:22(3.3)1つのparam(l、l):4:54:22 pm(3.4)1つのparm(f、l):4:54:22 pm cst --- getdateinstance ----(1.0) 1/23/14(2.2)1つのパラメーション(M):2014年1月23日(2.3)1つのパラメーション(L):2014年1月23日(2.4)1つのパラメーション(F):2014年1月23日(3.1)1つのパラメーション(S、L):14-1-23(3.2)1つのパラメーション(M、L):1つ2014年1月23日--- getDateTimeInstance ----(1.0)空のパラマ:2014年1月23日4:54:23 PM(2.1)1つのパラメージ(S):1/23/14 4:54 PM(2.2)1つのパラメーション(M):2014年1月23日4:54:23 PM(2.3) 2014年1月23日木曜日4:54:23 PM CST(3.1)1つのパラメーション(S、L):14-1-23 4:54:23 PM CST(3.1)1つのパラメーション(S、L):2014-1-23 16:54:23(3.3)1つのパラマCST(3.1)One Param(S、L):2014年1月23日木曜日04:54:23 PM CSTTESTFORMATSB = 2014年1月23日4:54:23 PM
わかりました。これまでのところ、DateFormatの学習は終了しました。次に、SimpledAteFormatを学び始めます。これは、フォーマット日付を理解する必要があることです。
SimpleDateFormat
1。SimpledateFormatの紹介
SimpleDateFormatは、日付をフォーマットし、日付文字列を解析するためのツールです。最も一般的に使用されるのは、指定された形式で日付をフォーマットすることです。その後、日付をフォーマットできる文字列を使用します。
より厳密に言えば、SimpledateFormatは、日付をロケール関連の方法でフォーマットおよび解析する特定のクラスです。フォーマット(日付 - >テキスト)、解析(テキスト>日付)、および正規化を許可します。
SimpleDateFormatコンストラクター:
コンストラクタ
SimpledAteFormat()SimpleDateFormat(String Pattern)SimpledAteFormat(String Template、dateFormatsymbols値)SimpledAteFormat(String Template、Locale Locale)
非建設者
void applylocalizedpattern(stringテンプレート)void applypattern(stringテンプレート)オブジェクトクローン()boolean equals(object buffer buffer、stringbufferバッファー、フィールドポジションフィールドポジション) hashcode()date parse(string string、parsoposition position)void set2digityearstart(日付)void setdateformatsymbols(dateformatsymbols値)string tolocalizedpattern()string topattern()
SimpleDateFormatシンプルなデモンストレーション:
//新しい日付オブジェクトを作成します。時間は2013-09-19date date = new Date(113,8,19)です。 //新しい「SimpleDateFormatオブジェクト」を作成し、SDFの「フォーマットモード」をSimpledateFormat sdf = new SimpledateFormat( "yyyy-mm-dd"); // sdfを使用してフォーマット日付を設定し、文字列を返します。 string str = sdf.format(date);
2。SimpleDateFormat関連形式の説明
2.1日付と時刻モード
日付と時刻形式は、日付と時刻のパターン文字列によって指定されます。日付と時刻のパターン文字列では、引用されていない文字「a」と「z」と「a」から「z」は、日付または時刻の文字列要素を表すパターン文字として解釈されます。説明を避けるために、テキストを単一の引用( ')に囲むことができます。 "''"は単一の引用を意味します。他のすべての文字は解釈されません。フォーマットされたときに出力文字列に単純にコピーされるか、解析時に入力文字列に一致します。
次のパターン文字が定義されています(他のすべてのキャラクター 'a'〜 'z' 'and' to 'z'が保存されています):
| 手紙 | 日付または時刻要素 | 急行 | 例 |
| g | ERAロゴ | 文章 | 広告 |
| y | 年 | 年 | 1996; 96 |
| m | 中年の月 | 月 | 7月; 7月; 07 |
| w | 年の数週間 | 番号 | 27 |
| w | 月の数週間 | 番号 | 2 |
| d | 一年の日 | 番号 | 189 |
| d | 月の日 | 番号 | 10 |
| f | 今月の週 | 番号 | 2 |
| e | 曜日 | 文章 | 火曜日;火 |
| a | AM/PMタグ | 文章 | PM |
| h | 1日の時間(0-23) | 番号 | 0 |
| k | 1日の時間(1-24) | 番号 | 24 |
| k | 午前/pmの時間数(0-11) | 番号 | 0 |
| h | 午前/pmの時間数(1-12) | 番号 | 12 |
| m | 時間の分 | 番号 | 30 |
| s | 数分で秒数 | 番号 | 55 |
| s | ミリ秒数 | 番号 | 978 |
| z | タイムゾーン | 一般タイムゾーン | 太平洋標準時間; PST; GMT-08:00 |
| z | タイムゾーン | RFC 822タイムゾーン | -0800 |
| 日付と時刻モード | 結果 |
| "yyy.mm.dd g 'at' hh:mm:ss z" | 2001.07.04 ADで12:08:56 PDT |
| 「eee、mmm d、 '' yy」 | 水曜日、7月4日、'01 |
| 「H:mma」 | 午後12時8分 |
| 「hh 'o'clock' a、zzzz」 | 午後12時、太平洋の昼光時間 |
| 「K:MM A、Z」 | 0:08 PM、PDT |
| "yyyyyy.mmmmmm.dd ggg HH:mm aaa" | 02001.July.04 AD 12:08 PM |
| 「eee、d mmm yyyy hh:mm:ss z」 | 水、2001年7月4日12:08:56 -0700 |
| 「yymmddhhmmssz」 | 010704120856-0700 |
| 「yyyy-mm-dd't'hh:mm:ss.ssz」 | 2001-07-04T12:08:56.235-0700 |
java.util.date; Import java.util.locale; Import java.util.calendar; Import java.text.dateformat; Import java.text.simpledateformat;/** * simpledateformat * * @author skywang * @email kuiwuewang @publicwang * @author static void main(string [] args){// simpledateformatを介して日付/時刻を取得:testsimpledateformats()に複数の形式があります。 // dateformat supertest()で日付/時刻を取得します。 } /*** SimpleDateFormatで日付 /時刻を取得します。 */ private static void testsimpledateformats(){string [] formats = new String [] {"HH:mm"、// 14:22 "H:mm A"、// 2:22 PM "HH:MM Z"、// 14:22 +0800 "HH:MM Zzzz" // 14:22 "yyyy-mm-dd"、// 2013-09-19 "yyyy-mm-dd hh:mm"、// 2013-09-19 14:22 "yyyy-mm-dd hh:mm:ss"、// 2013-09-1914:22:30 " 2013-09-19 14:22:30 "yyyyy-mm-dd hh:mm:ss.ssz"、// 2013-09-19 14:22:30 "yyyy-mm-dd hh:mm:ss.ssz"、// 2013-09-19 14:22:30 " 2013-09-19t14:22:30.000+0800 "yyyyy.mm.dd g 'at' hh:mm:ss z"、// 20133.09.19 Ad at 14:22:30 cst "k:mm a"、// 2:22 pm、cst "eee、mmm d a、zzzz "、// 02 o'clock pm、cst" yyyyyy.mmmm.dd ggg HH:mm aaa "、// 02013。 130919142230+0800 "yyyy-mm-dd't'hh:mm:ss.ssz"、// 2013-09-19t14:22:30.000+0800 "eeee 'date(' yyyy-mm-dd ') cst}; //日付date =(new Date(0)); //日付は1970-01-01 07:00:00 //日付= calendar.getInstance()。getTime(); //日付は現在の時刻日付=新しい日付(113、8、19、14、22、30)です。 //日付は2013-09-19 14:22:30 for(string format:formats){simpledateformat sdf = new simpledateFormat(format、locale.simplified_chinese); // SimpleDateFormat sdf = new SimpledateFormat(format); System.out.Format( "%30S%s/n"、format、sdf.format(date)); }}/***日付/時刻をdateformatを取得*/private static void supertest(){//新しい日付オブジェクトを作成します。時間は2013-09-19 14:22:30 //(01)year = "'目標年' -1900"、//(02)月です。 0は1月、1は2月などです。 //(03)日。 1-31日付MDATE = new Date(113、8、19、14、22、30)の間の数; locale locale = new Locale( "zh"、 "cn"); // 14:22:30 string time = dateformat.getTimeInstance(dateFormat.Medium、locale.simplified_chinese).format(mdate); // 2013-09-19文字列date = dateformat.getDateInstance(dateFormat.Medium、locale.simplified_chinese).format(mdate); // 2013-09-19 14:22:30文字列dateTime = dateFormat.getDateTimeInstance(dateFormat.Medium、dateFormat.Medium、locale.simplified_chinese).format(mdate); System.out.printf( "/ntime =%s/ndate =%s/ndateTime =%s/ndateTime =%s/n"、時間、日付、日付); }}実行結果:
HH:MM 14:22 h:MM A 2:22 PM HH:MM Z 14:22 CST HH:MM Z 14:22 +0800 HH:MM Zzzz 14:22 CST HH:MM:SS 14:22:30 YYYY-MM-DD 2013-09-19 yyyy-mm-dd hh:mm:SS 2013-09-19 14:22:30 yyyy-mm-dd HH:mm:mm:SS zzzz 2013-09-19 14:22:30 yyyy-mm-dd HH:MM:SS ZZZZ 2013-09-19 14:22:30 YYYMM-DDHH:MM 2013-09-19 14:22:30 yyyy-mm-dd HH:MM:MM:SS Zzzz 2013-09-19 14:22:30 Yeeee yyyy-mm-dd HH:MM:SS Zzzz木曜日2013-09-19 14:22:30 CST K:mm yyyy-mm-dd't'hh:mm:ss.ssz 2013-09-19t14:22:30.000+0800 yyyyy.mm.dd g 'at' hh:mm:ss z 2013.09.19 ad at 14:22:30 cst k:mm a 2:22 pm eee、mmm d 'o'clock' a、zzzz 02 occlock pm、yyyyyy.mmmmmm.dd ggg HH:mm aaa 02013。 yyyy-mm-dd't'hh:mm:ss.ssz 2013-09-19t14:22:30.000+0800eeee 'date(' yyyy-mm-dd ')' '時刻(' hh:ss ')' zzzz木曜日の日付(2013-09-19)時間(14:22:30)中国標準時間= 14:22:30date = 2013-9-19dateTime = 2013-9-19 14:22:30