最近处理logstash的日志,其中的时间是ISO8601格式的,需要对其转换。
查了下资料,下面给出java和python的实现。
java实现
引入joda-time,jdk的时间处理实现很麻烦。
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>${joda-time.version}</version>
</dependency>
实现方法:
//将传入的ISO8601 时间字符串,转成成指定格式的Local时区字(UTC+8)符串
public static String isoStr2utc8Str(String isoStr) throws ParseException {
DateTimeFormatter isoformat = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
DateTime dt= isoformat.parseDateTime(isoStr);
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss.SSS");
return dt.toString(format);
}
python实现
#将传入的ISO8601 时间字符串,转成成指定格式的Local时区字(UTC+8)符串
def isoStr2utc8Str(isoStr):
#取出timestamp,解析转成iso8601 navie datetime
utc= datetime.strptime(isoStr,'%Y-%m-%dT%H:%M:%S.%fZ')
#utc navie datetime设置时区,再换成本地时区,最后解析成字符串。时区可以硬编码。
utc8Time = utc.replace(tzinfo=tz.tzutc()).astimezone(tz.tzlocal()).strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
#utc8Time = utc.replace(tzinfo=tz.tzutc()).astimezone(tz.tzlocal()).replace(tzinfo=None)
return utc8Time