天气预报中的简单时间处理
svalbard的Python项目详细描述
斯瓦尔巴群岛
在天气预报的背景下轻松处理时间
概念
ForecastTime在天气预报场景中集成了两个中心时间概念。
anatime是数值天气预报模型初始化的时间。
有效时间是指天气预报对观测结果进行验证的时间。
这两个时间之间是一个时间间隔,预测时间以秒为单位进行跟踪,但是 由于小时是更常见的时间单位,因此此时间间隔的界面以小时为单位
fchours表示时间间隔。 时区太天真了。
用法
初始化
用户可以选择初始化没有参数的类,并使用如下setter设置时间属性:
fromsvalbardimportForecastTimeft=ForecastTime()ft.set_anatime('2018122800')ft.set_fchours(24)
使用
fromsvalbardimportForecastTimeft=ForecastTime(anatime='2018122800',fchours=24)
或者如果您想提供有效时间而不是fchours:
fromsvalbardimportForecastTimeft=ForecastTime(anatime='2018122800',validtime='2018122900')
使用一致性检查更新
forecasttime有anatime、validtime和fchours的getter和setter。二传手要确保三人之间的一致性。如果其中一个更新了,其他的一个也需要更新以保持一致性。
如果在设置anatime和validtime时更新fchours,则默认设置将保留anatime并更新validtime。
fromsvalbardimportForecastTimeft=ForecastTime(anatime='2018122800',fchours=24)ft.get_validtime()datetime.datetime(2018,12,29,0,0)ft.set_fchours(48)ft.get_validtime()datetime.datetime(2018,12,30,0,0)
但是,如果您想随时更新,则可以这样做
fromsvalbardimportForecastTimeft=ForecastTime(anatime='2018122800',fchours=24)ft.set_fchours(48,keep_anatime=False)ft.get_anatime()datetime.datetime(2018,12,27,0,0)
可选日期时间格式猜测
您可以选择使用字符串或python datetime对象初始化日期时间。
当使用字符串设置datetimes时,forecasttime需要确定字符串的格式。这是通过尝试格式化列表中的字符串来实现的。选择第一种格式,它生成一个有效的datetime对象而不跟踪错误。这看起来有点草率,但是要尝试的字符串格式列表可能由用户提供,并且它可能只包含一个格式字符串,这将消除猜测。名单在那儿是为了方便。
如果用户选择使用默认值,则将使用此列表。
somedatetimeformats=['%Y%m%d%H','%Y%m%d%H','%Y%m%d %H','%Y%m%d%H%M','%Y%m%d%H%M%S','%Y-%m-%d %H','%Y-%m-%d','%Y-%m-%d %H:%M:%S','%Y-%m-%d %H:%M:%SZ','%Y-%m-%dT%H:%M:%SZ','%Y-%m-%d %H%M%SZ','%m-%d-%Y %H:%M:%S']
实际发生的情况是,如果日期时间作为字符串提供,那么将调用guess_forecast_datetime_from_string函数。 此函数可以单独使用。
fromsvalbardimportguess_forecast_datetime_from_string,somedatetimeformatsguess_forecast_datetime_from_string('2010-01-01 12',datetimeformats=somedatetimeformats,verbose=False)# Returns[(5,'%Y-%m-%d %H',datetime.datetime(2010,1,1,12,0))]
guess_forecast_datetime_from_string返回一个三元组列表(index,format string,datetime object)。
文件名中的字符串插值
如果你想下载一些真实世界的天气预报,它们通常会出现在文件中,文件名中编码了anatime、validtime或fchours。
预计救援时间:
fromsvalbardimportForecastTimefromdatetimeimportdatetimegfs_url_template='http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.{anatime:%Y%m%d%H}/gfs.t{anatime:%H}z.pgrb2.0p25.f{fchours:03d}'anatime=datetime.now().strftime('%Y%m%d00')ft=ForecastTime(anatime=anatime)forhinrange(0,12,3):ft.set_fchours(h)print(ft)print(gfs_url_template.format(**ft.get_dict()))
预测时间:2018-12-28 00:00:00,有效时间:2018-12-28 00:00:00,fchours:0
http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2018122800/gfs.t12z.pgrb2.0p25.f000
预测时间:2018-12-28 00:00:00,有效时间:2018-12-28 03:00:00,fchours:3
http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2018122800/gfs.t12z.pgrb2.0p25.f003
预测时间:2018-12-28 00:00:00,有效时间:2018-12-28 06:00:00,fchours:6
http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2018122800/gfs.t12z.pgrb2.0p25.f006
预测时间:2018-12-28 00:00:00,有效时间:2018-12-28 09:00:00,fchours:9
http://www.ftp.ncep.noaa.gov/data/nccf/com/gfs/prod/gfs.2018122800/gfs.t12z.pgrb2.0p25.f009