我有一个从netCDF文件中提取的时间序列,我正在尝试将其转换为日期时间格式。时间序列的格式为“自1990-01-01 00:00:00 +10起的天数”(+10为格林尼治标准时间:+10)
time = nc_data.variables['time'][:]
time_idx = 0 # first timestamp
print time[time_idx]
9465.0
Run Code Online (Sandbox Code Playgroud)
我想要的输出是像这样的datetime对象(也是GMT +10):
2015-12-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
尽管我相信我可能使用的是错误的方法(我仍然是python和编程的新手),但我尝试使用时间模块转换此方法没有太大的成功。
import time
time_datetime = time.strftime('%Y-%m-%d %H:%M:%S', time.gmtime(time[time_idx]*24*60*60))
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏,干杯!
您可能正在寻找该datetime模块timedelta。
例如:
from datetime import date, timedelta
days = 9465 # This may work for floats in general, but using integers
# is more precise (e.g. days = int(9465.0))
start = date(1990,1,1) # This is the "days since" part
delta = timedelta(days) # Create a time delta object from the number of days
offset = start + delta # Add the specified number of days to 1990
print(offset) # >>> 2015-12-01
print(type(offset)) # >>> <class 'datetime.date'>
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用和/或操作偏移对象,或者将其转换为字符串表示形式(如果您认为合适)。
您可以使用与日期对象相同的格式time_datetime:
print(offset.strftime('%Y-%m-%d %H:%M:%S'))
Run Code Online (Sandbox Code Playgroud)
输出:
2015-12-01 00:00:00
Run Code Online (Sandbox Code Playgroud)
如果不使用的date对象,你可以使用一个datetime对象,而不是如果,例如,你以后打算时/分/秒/时区偏移添加到它。
该代码将保持与上面相同,除了两行:
# Here, you're importing datetime instead of date
from datetime import datetime, timedelta
# Here, you're creating a datetime object instead of a date object
start = datetime(1990,1,1) # This is the "days since" part
Run Code Online (Sandbox Code Playgroud)
注意:尽管您没有声明,但是另一个答案表明您可能正在寻找时区感知的日期时间。如果是这样的话,这dateutil是另一个答案建议的使用Python 2的方法。在Python 3中,您想使用datetime模块的tzinfo。
netCDF num2date是在这里使用的正确函数:
import netCDF4
ncfile = netCDF4.Dataset('./foo.nc', 'r')
time = ncfile.variables['time'] # do not cast to numpy array yet
time_convert = netCDF4.num2date(time[:], time.units, time.calendar)
Run Code Online (Sandbox Code Playgroud)
这会将自 1900-01-01(即unitsof time)以来的天数转换为 python datetime 对象。如果time没有calendar属性,则需要指定日历,或者使用默认的标准。
| 归档时间: |
|
| 查看次数: |
4835 次 |
| 最近记录: |