Tôi có một số UUID được tạo trong chương trình của mình một cách ngẫu nhiên, nhưng tôi muốn có thể trích xuất dấu thời gian của UUID được tạo ra cho mục đích thử nghiệm. Tôi nhận thấy rằng bằng cách sử dụng accessor fields
tôi có thể nhận được các phần khác nhau của dấu thời gian nhưng tôi không có ý tưởng về cách kết hợp chúng.Trích xuất thời gian từ UUID v1 trong python
Trả lời
Nhìn bên /usr/lib/python2.6/uuid.py bạn sẽ thấy
def uuid1(node=None, clock_seq=None):
...
nanoseconds = int(time.time() * 1e9)
# 0x01b21dd213814000 is the number of 100-ns intervals between the
# UUID epoch 1582-10-15 00:00:00 and the Unix epoch 1970-01-01 00:00:00.
timestamp = int(nanoseconds/100) + 0x01b21dd213814000L
giải quyết các phương trình cho time.time(), bạn sẽ nhận được
time.time()-like quantity = ((timestamp - 0x01b21dd213814000L)*100/1e9)
Vì vậy, sử dụng:
In [3]: import uuid
In [4]: u = uuid.uuid1()
In [58]: datetime.datetime.fromtimestamp((u.time - 0x01b21dd213814000L)*100/1e9)
Out[58]: datetime.datetime(2010, 9, 25, 17, 43, 6, 298623)
Điều này cho giờ kết hợp với UUID được tạo bởi uuid.uuid1
.
Hoặc chỉ cần sử dụng TimeUUID library, để bạn biết bạn đã không nhận được toán sai
Ví dụ
import uuid
import time_uuid
my_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
ts = time_uuid.TimeUUID(bytes=my_uuid.bytes).get_timestamp()
Nguồn repo là https://github.com/samuraisam/time_uuid – bcattle
Bạn có thể sử dụng một công thức đơn giản mà sau trực tiếp from the definition:
Dấu thời gian là giá trị 60 bit. Đối với phiên bản UUID 1, đây là được đại diện bởi Giờ quốc tế phối hợp (UTC) với số lượng khoảng 100- khoảng thời gian nano từ 00: 00: 00.00, 15 tháng 10 năm 1582 (ngày cải cách Gregorian theo lịch Kitô giáo).
>>> from uuid import uuid1
>>> from datetime import datetime, timedelta
>>> datetime(1582, 10, 15) + timedelta(microseconds=uuid1().time//10)
datetime.datetime(2015, 11, 13, 6, 59, 12, 109560)
Kể từ khi tôi có Cassandra cài đặt và tôi đang sử dụng này với Cassandra tôi đã có thể sử dụng datetime_from_uuid1 từ cassandra.util
>>> import uuid
>>> from cassandra.util import datetime_from_uuid1
>>> foo = uuid.uuid1()
>>> dt_foo = datetime_from_uuid1(foo)
>>> dt_foo
datetime.datetime(2016, 07, 26, 8, 2, 12, 104560)
- 1. Thời gian trích xuất từ ngày Chuỗi
- 2. Trích xuất phần thời gian từ cột TimeStamp trong ORACLE
- 3. trích xuất thời gian trung bình từ ping -c
- 4. Cách tạo UUID theo thời gian?
- 5. Trích xuất luồng Python
- 6. Dấu thời gian của Oracle: trích xuất toàn bộ giờ
- 7. Trích xuất bảng từ tài liệu Word DOCX trong python
- 8. Cách trích xuất trang trình bày từ video bằng python
- 9. trích xuất thời gian từ ngày giờ bằng cách sử dụng javascript
- 10. Làm cách nào để trích xuất các mục thời gian từ một băm?
- 11. Trích xuất thời gian từ ngày giờ và xác định xem thời gian (không phải ngày) có nằm trong phạm vi không?
- 12. Trích xuất thông tin từ một Tuple (Python)
- 13. Trích xuất tọa độ từ tệp KML BatchGeo bằng Python
- 14. Cách trích xuất mã thời gian bắt đầu và siêu dữ liệu thời lượng/độ dài từ tệp .mov?
- 15. Trích xuất địa chỉ IP từ chuỗi html (python)
- 16. Cách trích xuất URL từ một trang HTML bằng Python
- 17. C# trích xuất dữ liệu từ XML
- 18. trích xuất ngày từ giá trị numpy.timedelta64
- 19. Trích xuất ký tự từ chuỗi
- 20. Làm cách nào tôi có thể trích xuất tài nguyên vào tệp trong thời gian chạy?
- 21. Trích xuất bitmap từ video trong android
- 22. cách trích xuất từ dispatch.json.JsObject
- 23. Trích xuất bảng từ DOCX
- 24. Trích xuất EXIF từ JPEG
- 25. Trích xuất URL từ chuỗi
- 26. Trích xuất tên miền từ url
- 27. Trích xuất văn bản từ PDF
- 28. trích xuất phần ngày từ DateTime trong C#
- 29. Trích xuất thông tin từ $?
- 30. Python Regular Expressions để trích xuất ngày
Hình như bạn giải quyết vấn đề của tôi. Trong thời gian chờ đợi, tôi phải quay lại và tạo một hàm tạo riêng vì nó chỉ tạo ra các dấu thời gian hiện tại và tôi cần các dấu thời gian ngẫu nhiên trong quá khứ. Cảm ơn bạn đã trả lời nhanh chóng của bạn :-) – cdecker
thú vị, uuid epoch đề cập đến lịch Julian .. (facepalm) – ezdazuzena
@ezdazuzena Trên thực tế, Gregorian (xem [RFC 4122, phần 4.1.4] (https://tools.ietf.org /html/rfc4122#section-4.1.4) về cải cách Gregorian theo lịch Kitô giáo). Điều này hoàn toàn tùy ý, tất nhiên, nhưng cũng là kỷ nguyên UNIX. Tôi thách thức bạn chọn một cái tốt hơn, giải thích tại sao quyết định của bạn không chỉ là tùy ý, * và * chứng minh sự cần thiết phải thay đổi tiêu chuẩn hiện tại (và hàng loạt phụ thuộc và gián tiếp phụ thuộc) để theo bạn. – zxq9