日付を扱うには

◆PROCESSING 逆引きリファレンス

 カテゴリー:演算処理

日付を扱うには

【解説】

PROCESSINGはJavaをベースにした言語ですので、日付の処理に関してはJavaの命令がそのまま利用可能です。

PROCESSINGで日付を扱うには、基本的にはJavaの命令を利用します。ですが単純に年月日時分秒が得たいだけなら、PROCESSINGの独自命令で簡単に取得する事も可能です。

下記では、PROCESSINGとJavaによる日付取得方法について紹介します。

なおJavaの命令で日付を扱う事に関しては、下記サイト様などに詳しく掲載されていますので、本格的に日付を扱いたい方は参考としてみて下さい。

 

【構文】

PROCESSINGで日付を扱う命令

●年月日時分秒を取得する
int   y  =  year( ) ;          //  2017
int  m  =  month( ) ;    //  1 – 12
int  d  =  day( ) ;           //  1 – 31
int  h  =  hour( ) ;         //  1 – 23
int  mi  =  minute( ) ; //  0 – 59
int  s  =  second( ) ;    //  0 – 59

Javaで日付を扱う代表的な命令

●ローカル日付を取得する
LocalDateTime  ldt  =  LocalDateTime . now( ) ;     //  2017-09-16T23:30:59.999

●日付型⇒書式文字列
DateTimeFormatter  dtf1  
=  DateTimeFormatter.ofPattern( “yyyy/MM/dd(EEEE) HH:mm:ss SSS” ;
String  localStr  =  dtf1 . format( ldt ) ;    // 2017/09/16(土曜日) 23:30:59.999

●書式文字列⇒日付型
DateTimeFormatter  dtf2  =  DateTimeFormatter.ofPattern( “yyyy/MM/dd HH:mm:ss” ) ;
LocalDateTime  fd  =  LocalDateTime . parse( “2017/12/25(月曜日) 23:30:59 000”,  dtf2  ) ;

●日付時刻の加算
LocalDateTime addDay  =  ldt . plusYears( 1 ) . plusMonths( 2 ) . plusDays( 3 ) ;
LocalDateTime addHour  =  ldt . plusHours( 1 ) . plusMinutes( 2 ) . plusSeconds( 3 ) ;

●日付時刻の減算
LocalDateTime  delDay  =  ldt . minusYears( 1 ) . minusMonths( 2 ) . minusDays( 3 ) ;
LocalDateTime  delHour  =  ldt . minusHours( 1 ) . minusMinutes( 2 ) . minusSeconds( 3 ) ;

●和暦を取得する
JapaneseDate  jpd  =  JapaneseDate.from( ldt ) ;
DateTimeFormatter  jpf  =  DateTimeFormatter.ofPattern( “Gyy年MM月dd日” ) ;
String  japanStr  =  jpd.format( jpf );    //平成29年09月16日

●曜日番号を取得する
int  an  =  ldt . get(  ChronoField . DAY_OF_WEEK  ) ;  // 曜日番号 月曜=1、日曜=7

●ミリセカンドを取得する
int  ms  =  ldt . get( ChronoField . MILLI_OF_SECOND ) ;  // 000 – 999

●年月日時分秒ナノセカンドを取得する
int  y  =  ldt . getYear( ) ;                     //  2017
int  m  =  ldt . getMonthValue( ) ;   //    1 – 12
int  d  =  ldt . getDayOfMonth( ) ;   // 1 – 31
int  h  =  ldt . getHour( ) ;                  //  1 – 23
int  mi  =  ldt . getMinute( ) ;           // 0 – 59
int  s  =  ldt . getSecond( ) ;             // 0 – 59
int  ns  =  ldt . getNano( ) ;              //  000000000 – 999999999

 

【注意】

PROCESSINGには、「現在のミリセカンド」を取得する命令はありません。millis( ) という命令がありますが、これはPROCESSINGのアプリケーションを起動してからの通算ミリ秒です。現在時刻ではありませんので、注意してください。

PROCESSINGには現在日時を取得する簡易な命令しかありません。日付の加算・減算(XX月YY日からn日後など)を計算したい場合や、タイムゾーンを意識した時刻を扱いたい場合は、素直にJavaの命令を利用しましょう。

ただし、Java8から日付を扱う命令が大きく変更になりました。Java7以前を利用される方は、ここで紹介した命令は使えないので注意してください。

Javaの命令を利用すれば、和暦を取得する事も可能です。ただし JapaneseDate  では明治、大正、昭和、平成の元号のみをサポートし、かつ明治6年1月1日以前は扱うことができません。

JapaneseDateで、明治6年1月1日より前の日付を扱おうとすると「DateTimeException : JapaneseDate Before MEiji 6 is not supported」例外が発生します。

なんでそんなに中途半端なんだ・・・と調べてみたら、日本では明治5年12月2日(1872年12月31日)までは、旧暦(太陰太陽暦)を採用していたんですね。

  • 参考:海上保安庁 海洋情報部 様(http://www1.kaiho.mlit.go.jp/KOHO/faq/reki/rekicyuu.html)

で、その翌日からグレゴリオ暦(太陽暦)に移行し、明治6年(1873年)1月1日となりました。つまりJapaneseDate  は、旧暦には対応していないという事になります。

またJava8のLocalDateTime . parseには不具合があり、”yyyyMMddHHmmssSSS”  形式の文字列を日付型に変換する事ができません(汗)。

変換したい場合は、”yyyyMMddHHmmss.SSS” のように、ミリセカンドの前にピリオドを入れたり、”yyyy/MM/ddHHmmssSSS” のように、日付の後ろにスラッシュを入れる必要があります。

本件に関しては、下記サイト様に情報が掲載されていました。

 

【関連記事】

  • なし

 


サンプルプログラム

PROCESSINGで年月日時分秒を取得する例:

PROCESSINGの独自命令で、年月日時分秒を取得して表示しています。millis() は現在のミリセカンドではなく、経過時間である事に注意してください。

<出力サンプル>

 

Java8でローカル日付を取得する例:

ローカル日付を取得して表示しています。
日付は、デフォルトでは  YYYY-MM-DDTHH:MI:SS.NNN  形式となります。

<出力サンプル>

 

Java8で日付型を文字列に変換する例:

得られたローカル日付を、文字列化しています。EEEEは曜日、SSSはミリセカンドを得るための書式です。大文字小文字に意味がありますので、注意してください。

書式については、下記公式リファレンスを参考としてください。

<出力サンプル>

 

Java8で書式文字列を日付型に変換する例:

前述サンプルの逆パターンですね。文字列から日付型の値を得ます。
文字列は、DateTimeFormatter.ofPatternで指定した形式じゃないと変換時に例外となるので注意してください。

<出力サンプル>

 

Java8で日付の加算を行う例:

現在日時に、年月日や時分秒を加算しています。

<出力サンプル>

 

Java8で日付の減算を行う例:

LocalDateTime . plus ではなく .minus を利用すると、年月日や時分秒の減算を行うことが可能です。

<出力サンプル>

 

Java8で和暦を表示する例:

ローカル日時を和暦表記に変換して表示しています。

一見便利そうですが、明治5年以前に対応していなかったり、新元号が登場した場合に変更が必要だったりと・・・意外と使えない子かもしれません(汗)。

<出力サンプル>

 

Java8で年月日時分秒を取得する例:

ローカル日時をベースに、年月日時分秒などを値として取得しています。
曜日とミリセカンドの取得方法が特殊なので、注意してください。

各曜日の意味は、以下のサイト様を参考にさせて頂きました。

<出力サンプル>


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。