有什么快速的方法可以获取时间并转换为时间戳?
string="2018-10-17 12:31:46 UTC::@:[2771]:LOG: checkpoint starting: time"
我可以使用split
来获取前4个
>>> string.split(":")[:3]
['2018-10-17 12', '31', '46 UTC']
但是如何将它们合并回时间字符串并转换为时间戳?
@jezrael使用您的解决方案,我将其转换为时间戳,但时间似乎已漂移。
>>> date = parser.parse(':'.join(string.split(":")[:3]))
>>> print(date)
2018-10-17 12:31:46+00:00
>>> timestamp = int(round(time.mktime(date.timetuple()) * 1000))
>>> print(timestamp)
1539743506000
我使用以下代码将日志上传到cloudwatch,它使用了我从日志字符串中获得的日期/时间戳。
logs = boto3.client('logs')
date = parser.parse(':'.join(string.split(":")[:3]))
timestamp = int(round(time.mktime(date.timetuple()) * 1000))
event_response = logs.put_log_events(
logGroupName=LOG_GROUP,
logStreamName=LOG_STREAM,
logEvents=[{
'timestamp': timestamp,
'message': string
}],
sequenceToken=str(next_sequence_token))
coudwatch中带有真实日志的日期不同:
最后我使用以下代码,它需要python v3.3 +
$ python3
Python 3.7.0 (default, Oct 4 2018, 14:10:21)
[Clang 10.0.0 (clang-1000.10.44.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from dateutil import parser
>>> string="2018-10-17 12:31:46 UTC::@:[2771]:LOG: checkpoint starting: time"
>>> date = parser.parse(':'.join(string.split(":")[:3]))
>>> timestamp = int(round(date.timestamp() * 1000))
>>> print(timestamp)
1539779506000
答案 0 :(得分:4)
我们可以将join
与parser
模块一起使用。
from dateutil import parser
string="2018-10-17 12:31:46 UTC::@:[2771]:LOG: checkpoint starting: time"
date = parser.parse(':'.join(string.split(":")[:3]))
print (date)
2018-10-17 12:31:46+00:00
答案 1 :(得分:1)
对我来说,简单的方法是用UTC::
拆分并使用dateutil中的解析器:
from dateutil import parser
string="2018-10-17 12:31:46 UTC::@:[2771]:LOG: checkpoint starting: time"
parser.parse(string.split(' UTC::')[0])
结果是
datetime.datetime(2018, 10, 17, 12, 31, 46)