天气预报中的简单时间处理

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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何编写带有连接的动态JPA查询?   子列表上的java分区列表,其中相邻子列表的第一个和最后一个元素相同   java限定符注释方法找不到作为配置类的bean   java同时抛出主异常和子类型,有合适的方法吗?   LString将是一个链表类,它模仿标准的JavaString和StringBuilder类   spring上下文关闭时java停止ConcurrentTaskScheduler   Java继承基类使用派生类方法   java Google的zxing(斑马线)条形码库的位矩阵不是它应该位于的位置   java使用springhateoas反序列化包含(_链接和_嵌入)的JSON   java破坏者如何使用环形缓冲区读取文件?   java在Android中获得用户的日常路线?   javajenkins:依赖于其他工件/项目的构建作业   java家庭替换应用程序/视图网格使用哪种布局?   java如何从签名证书创建信任库和密钥库?