Link Search Menu Expand Document

EAC的時間標籤

Table of contents

nc bytes to datetime

reanalysis data

  • EAC4檔案基本上是個grib2檔案,即使經ncl_convert2nc轉換了之後,雖為nc檔,然其架構內涵與WRF或者是IOAPI-m3.nc皆完全不同,需要特別處理。
  • ncl_convert2nc會將EAC4檔案的時間標籤名稱命名為initial_time0,為一時間、字串長之2維的字串陣列。
    • 字串共有18個字元
    • 樣式為mm/dd/yyyy (hh:mm)
    • 目標要轉成wrf格式%m/%d/%Y (%H:%M)
  • 同樣先將個別18個byte轉成str,再連成字串、,最後再讀成datetime
SDATE=[datetime.datetime.strptime(''.join([str(i, encoding='utf-8') for i in list(nc.variables[V[1][0]][t, :])]),\
 '%m/%d/%Y (%H:%M)') for t in range(nt)]

forecast data

  • CAMS預報場經ncl_conver2nc轉換後,並沒有initial_time的變數項,而是存在於每項污染濃度的屬性:nc.variables[V[3][0]].initial_time
  • 因為該時間標籤已經是個string了,不需要再encoding 與join,直接進行轉換即可。指令:bdate=datetime.datetime.strptime(''.join(nc.variables[V[3][0]].initial_time),'%m/%d/%Y (%H:%M)')
  • 該時間只是模式啟始時間,如要計算每個time frame的時間,另有變數(V[0])forecast_time0,為0 ~ 120的整數(單位為小時),可供使用:SDATE=[bdate+datetime.timedelta(hours=int(i)) for i in nc['forecast_time0'][:].data]

datetime to nc bytes

  • 目前尚未有應用之需求

直接開啟grib2檔案

  • 使用pygrib模組來開啟:grbs = pygrib.open(fname)
  • grib2檔案可能只有單一個timeframe(如CWB_WRF之結果檔),要讀取所有內容才能決定。
    • grib2的record number序號是由1開始排序,長度為grbs.messages
    • 如每個record是不同時間框架(EAC4檔案),validDate會有所不同。
  • 檔案內有2個時間資訊
    • grbs[1].anaDate:為批次作業的啟始時間。
    • grbs[1].validDate:為該grib2檔案的時間框架。
    • 類型為datetime.datetime
    • 格式如:2022-07-29 12:00:00
#!/cluster/miniconda/envs/gribby/bin/python
import sys
import pygrib
fname=sys.argv[1]
grbs = pygrib.open(fname)
dates=list(set([grbs[i].validDate for i in range(1,grbs.messages+1)]))
n=len(dates)
if n>1:
  dates.sort()
for i in range(n):
  print(i,dates[i])

Reference