- 积分
- 57092
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2011-6-21
- 最后登录
- 1970-1-1
|
发表于 2014-3-5 17:23:01
|
显示全部楼层
水晶杯喝茶 发表于 2014-3-5 11:00
谢谢王老师啊
这是个让人比较蛋疼的问题!!!
数据里时间维的设置如下:
NC_DOUBLE time(time);
time: units = "hours since 1800-1-1 00:00:0.0";
time: long_name = "Time";
time: delta_t = "0000-01-00 00:00:00";
time: actual_range = -15769752, -15761736;
time: avg_period = "0030-00-00 00:00:00";
time: prev_avg_period = "0000-01-00 00:00:00";
time: standard_name = "time";
time: axis = "T";
time: coordinate_defines = "start";
time: climatology = "climatology_bounds";
time: climo_period = "1981/01/01 - 2010/12/31";
time: ltm_range = 1586616, 1848840;
time: interpreted_actual_range = "0001/01/01 00:00:00 - 0001/12/01 00:00:00";
数据的第一个时间是1800-1-1减去15769752,正好是0001/01/01。这个用Java来处理没有问题(该数据可以用Java版MeteoInfo顺利打开),但是用C#处理就会出错(时间超过最小值,即0001/01/01)。要理解这个问题先要回顾一下公历的历史,公历最初用的是儒略历(Junlian Calender),之后换为格里高利历(Gregorian Calender),而这个转换的时间就是1582年10月4日(儒略历),之后就是1582年10月15日(格里高利历)。Java de GregorainCalender类是一个混合历的类,可以正确处理这种情况,而C#中没有相应的混合历类。
对这种情况在C#代码中用了一点小技巧来解决,我会上传更新的MeteoInfo文件,你可以在置顶帖子里下载。
|
|