Trên thực tế, phương pháp datetime
Python của xử lý micro chính xác, không millisecond:
>>> nanos = 1360287003083988472
>>> secs = nanos/1e9
>>> dt = datetime.datetime.fromtimestamp(secs)
>>> dt.strftime('%Y-%m-%dT%H:%M:%S.%f')
'2013-02-07T17:30:03.083988'
Nhưng nếu bạn thực sự cần nano giây, điều đó vẫn không giúp đỡ. Tốt nhất là để viết wrapper của riêng bạn:
def format_my_nanos(nanos):
dt = datetime.datetime.fromtimestamp(nanos/1e9)
return '{}{:03.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S.%f'), nanos % 1e3)
này mang lại cho tôi:
'2013-02-07T17:30:03.083988472'
Tất nhiên bạn có thể làm điều tương tự ngay cả khi Python đã không làm chính xác phụ thứ hai ở tất cả …
def format_my_nanos(nanos):
dt = datetime.datetime.fromtimestamp(nanos/1e9)
return '{}.{:09.0f}'.format(dt.strftime('%Y-%m-%dT%H:%M:%S'), nanos % 1e9)
@abarnert Tôi không nghĩ vậy. Câu hỏi này đề cập đến việc chuyển đổi một số thành một chuỗi có thể đọc được con người, trong khi câu hỏi đó đang cố chuyển đổi từ một chuỗi thành một đối tượng 'datetime'. – ethguo
@ ethg242: Câu hỏi đó sắp xếp tất cả mọi nơi, nhưng nó lại rơi xuống cùng một thứ: 'datetime' không xử lý nano giây, vì vậy bạn phải tự mình làm toán/chuỗi. Có lẽ có một câu hỏi về 'strptime' và một câu hỏi khác về' strftime'. – abarnert
đây là một trong những tốt hơn so với các bản sao – n611x007