html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/827#issuecomment-1011121158,https://api.github.com/repos/pydata/xarray/issues/827,1011121158,IC_kwDOAMm_X848RHwG,6514690,2022-01-12T14:48:24Z,2022-01-12T14:48:24Z,NONE,Also mentioned in #4422 and fixed in #4506,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-457975000,https://api.github.com/repos/pydata/xarray/issues/827,457975000,MDEyOklzc3VlQ29tbWVudDQ1Nzk3NTAwMA==,26384082,2019-01-28T01:41:04Z,2019-01-28T01:41:04Z,NONE,"In order to maintain a list of currently relevant issues, we mark issues as stale after a period of inactivity If this issue remains relevant, please comment here; otherwise it will be marked as closed automatically ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-212029772,https://api.github.com/repos/pydata/xarray/issues/827,212029772,MDEyOklzc3VlQ29tbWVudDIxMjAyOTc3Mg==,2443309,2016-04-19T17:32:45Z,2016-04-19T17:32:45Z,MEMBER,"> Unfortunately, pandas interprets dates like '1-1-1' or '01-JAN-0001' as January 1, 2001 this is too bad. > use netCDF4's reference time decoding (if available) before trying to use pandas in decode_cf_datetime. Note that it is important to only decode only the one reference time if possible using netCDF4, because it's a lot faster to parse dates with vectorized operations with pandas/numpy. This seems easy enough. It would be nice if we always had `netcdftime` available. I can try to take a hack at this later this week (unless someone gets there first). ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-211471850,https://api.github.com/repos/pydata/xarray/issues/827,211471850,MDEyOklzc3VlQ29tbWVudDIxMTQ3MTg1MA==,8363752,2016-04-18T16:54:57Z,2016-04-18T16:54:57Z,NONE,"I would rather stick only with xarray, but iris solved the issue for now... Another alternative is to use NCO an do something like:`ncatted -O -a units,time,o,c,'days since 0001-01-01 00:00:00'` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-211138272,https://api.github.com/repos/pydata/xarray/issues/827,211138272,MDEyOklzc3VlQ29tbWVudDIxMTEzODI3Mg==,1217238,2016-04-18T00:25:00Z,2016-04-18T00:25:00Z,MEMBER,"Ah, I finally figured out what's going on. We use pandas to cleanup time units in an attempt to always write ISO-8601 compatible reference times. Unfortunately, pandas interprets dates like `'1-1-1'` or `'01-JAN-0001'` as January 1, 2001: ``` In [21]: pd.Timestamp('1-1-1 00:00:0.0') Out[21]: Timestamp('2001-01-01 00:00:00') In [25]: pd.Timestamp('01-JAN-0001 00:00:00') Out[25]: Timestamp('2001-01-01 00:00:00') ``` One might argue this is a bug in pandas, but nonetheless that's what it does. xarray can currently handle datetimes outside the range dates hangled by pandas (roughly 1700-2300), but only if pandas raises an OutOfBoundDatetime error. Two fixes that we need for this: - use netCDF4's reference time decoding (if available) _before_ trying to use pandas in [decode_cf_datetime](https://github.com/pydata/xarray/blob/master/xarray/conventions.py#L115). Note that it is important to only decode only the one reference time if possible using netCDF4, because it's a lot faster to parse dates with vectorized operations with pandas/numpy. - stop using [_cleanup_netcdf_time_units](https://github.com/pydata/xarray/blob/master/xarray/conventions.py#L225), since apparently it can go wrong. cc @jhamman who has some experience with these issues ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-211120008,https://api.github.com/repos/pydata/xarray/issues/827,211120008,MDEyOklzc3VlQ29tbWVudDIxMTEyMDAwOA==,8363752,2016-04-17T21:36:09Z,2016-04-17T21:36:09Z,NONE,"ds.time.encoding results in ``` {'dtype': dtype('float64'), 'original_shape': (81,), 'source': 'http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/gfs20160417/gfs_0p25_00z', 'units': u'days since 1-1-1 00:00:0.0'} ``` I tried to use ds.to_netcdf('filename.nc', encoding={'time': {'units': u'days since 1-1-1 00:00:0.0'}}), but ncdump still shows ""time"" as having ""days since 2001-01-01"" as reference time: ``` double time(time) ; string time:grads_dim = ""t"" ; string time:grads_mapping = ""linear"" ; string time:grads_size = ""81"" ; string time:grads_min = ""00z17apr2016"" ; string time:grads_step = ""3hr"" ; string time:long_name = ""time"" ; string time:minimum = ""00z17apr2016"" ; string time:maximum = ""00z27apr2016"" ; time:resolution = 0.125f ; string time:units = ""days since 2001-01-01"" ; time:calendar = ""proleptic_gregorian"" ; ``` ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551 https://github.com/pydata/xarray/issues/827#issuecomment-210926466,https://api.github.com/repos/pydata/xarray/issues/827,210926466,MDEyOklzc3VlQ29tbWVudDIxMDkyNjQ2Ng==,1217238,2016-04-17T00:09:06Z,2016-04-17T00:09:15Z,MEMBER,"When you're writing the data back to disk with [to_netcdf](http://xarray.pydata.org/en/stable/generated/xarray.Dataset.to_netcdf.html#xarray.Dataset.to_netcdf), try writing something like: `ds.to_netcdf('somefile.nc', encoding={'time': {'units': '01-JAN-0001 00:00:00'}})`. But I'm a little surprised this doesn't work by default. Xarray does use '2001-01-01' as a default reference time, but if you pulled the data from an existing dataset (rather than creating the time variable directly yourself such as with numpy or pandas), then it should save the original units in `encoding` attribute of the `time` variable, which should then be used to save the units that it writes to the file. If `ds` is the name of the dataset you open from OpenDAP or save to netcdf, what does the value of `ds.time.encoding` look like? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,148876551