GrADSにおける日時のフォーマットの変換

描画した図のタイトルの一部に日時の情報を書きたいことがよくある.

GrADSにおいて, 現在指定している日時の情報は”q time”で取得できるが, 00Z15SEP2025のような形式であり, GIFアニメーションの時刻ラベルなどに使用するには不向きである. そこで, GrADS形式の日時を以下のようなフォーマットに変換することを考える:

  • yyyy/mm/dd hh:nnZ
  • yyyy-mm-dd hh:nnZ

‘q time’で得られる日時の文字列は長さが12または15であることに注意が必要である. 12時30分のように分の部分が’00’でない場合は’12:30Z15SEP2025’のように15桁であるが, 12時00分の場合には’12Z15SEP2025’のように12桁で表示される. なので, 文字列の長さを調べて場合分けが必要となる.

‘q time’で取得した日時gdateを上記のようなフォーマットに変換するには以下のように処理すればよい:

'q time'
gdate = subwrd(result,3)
len = math_strlen(gdate)
if (len != 12 & len != 15)
    say 'Wrong length of GrADS date: 'gdate
    exit
endif

if (len = 12)
    yyyy = substr(gdate,9,4)
    mon  = substr(gdate,6,3)
    mm   = mon2mm(mon)
    dd   = substr(gdate,4,2)
    hh   = substr(gdate,1,2)
    nn   = '00'
    date1 = yyyy % '/' % mm % '/' % dd % ' ' % hh % ':00Z'
    date2 = yyyy % '-' % mm % '-' % dd % ' ' % hh % ':00Z'
else
    yyyy = substr(gdate,12,4)
    mon  = substr(gdate,9,3)
    mm   = mon2mm(mon)
    dd   = substr(gdate,7,2)
    hh   = substr(gdate,1,2)
    nn   = substr(gdate,4,2)
    date1 = yyyy % '/' % mm % '/' % dd % ' ' % hh % ':' % nn % 'Z'
    date2 = yyyy % '-' % mm % '-' % dd % ' ' % hh % ':' % nn % 'Z'
endif

say date1
say date2

このような処理を組み込んだ関数get_date.gsfをgithub上で公開しています:
URL: https://github.com/CptHaus/my_grads_script/tree/main/get_date

例えば, 時刻付きのGIFアニメーションを作成する場合には, 以下のように使用できる:

ret = gsfallow('on')
n = 1
while(n<=24)
  'set t 'n
  # 描画設定
  ~~~
  # 描画
  ~~~
  # 日時の取得
  kind = 'ymdh' # 'y', 'ym', 'ymd', 'ymdh', 'ymdhn'を指定可能
  format = 1    # 1: yyyy/mm/dd hh:nnZ, 2: yyyy-mm-dd hh:nnZ
  date = get_date(kind,format)
  # タイトルに日時を表示
  'draw title DATE = 'date
  'gxprint tmp.eps'
  label = math_format('%02g',n)
  '!convert -rotate 90 -density 300 tmp.eps fig-'label'.jpg'
  n = n + 1
endwhile
'!convert -delay 30 -loop 0 fig-*.jpg test.gif'

.gsf を呼び出して使用する場合には, gsfallow(‘on’)を実行しておく必要がある. get_date.gsf では, 日付の出力項目として以下の5つを選択可能(kindで指定)である:

  • yyyy
  • yyyy/mm または yyyy-mm
  • yyyy/mm/dd または yyyy-mm-dd
  • yyyy/mm/dd hhZ または yyyy-mm-dd hhZ
  • yyyy/mm/dd hh:nnZ または yyyy-mm-dd hh:nnZ

get_date.gsf の詳細な使用方法は README.md を参照してください.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA