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/3407#issuecomment-542594876,https://api.github.com/repos/pydata/xarray/issues/3407,542594876,MDEyOklzc3VlQ29tbWVudDU0MjU5NDg3Ng==,868027,2019-10-16T08:44:50Z,2019-10-16T08:44:50Z,CONTRIBUTOR,"Hi @zxdawn
Does this modified version of your code do what you want?:
```python
import numpy as np
import xarray as xr
tstr='2019-07-25_00:00:00'
Times = xr.DataArray(np.array([tstr], dtype = np.dtype(('S', 16))), dims = ['Time'])
ds = xr.Dataset({'Times':Times})
ds.to_netcdf(
'test.nc',
format='NETCDF4',
encoding={
'Times': {
'zlib':True,
'complevel':5,
'char_dim_name':'DateStrLen'
}
},
unlimited_dims={'Time':True}
)
```
Output of ncdump:
```
netcdf test {
dimensions:
Time = UNLIMITED ; // (1 currently)
DateStrLen = 19 ;
variables:
char Times(Time, DateStrLen) ;
data:
Times =
""2019-07-25_00:00:00"" ;
}
```
Some explanation of what is going on:
Strings in numpy aren't the most friendly thing to work with, and the data types can be a little confusing. In your code, the `""S1""` data type is saying ""this array has null terminated strings of length 1"". That 1 in the ""S1"" is the string length. This resulted in you having an array of one character strings that was 19 elements long:
```
array([[b'2', b'0', b'1', b'9', b'-', b'0', b'7', b'-', b'2', b'5', b'_',
b'0', b'0', b':', b'0', b'0', b':', b'0', b'0']], dtype='|S1')
```
vs what I think you want:
```
array([b'2019-07-25_00:00:00'], dtype='|S19')
```
Since you know that your string length is going to be 19, you should tell numpy about this instead of xarray by either specifying the data type as `""S19""` or using the data type constructor (which I prefer): `np.dtype((""S"", 19))`","{""total_count"": 3, ""+1"": 3, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,507658070