복붙노트

[PYTHON] 파이썬으로 UUID v1에서 시간 추출하기

PYTHON

파이썬으로 UUID v1에서 시간 추출하기

내 프로그램에서 무작위로 생성되는 일부 UUID가 있지만 테스트 목적으로 생성 된 UUID의 타임 스탬프를 추출 할 수 있기를 원합니다. 필드 접근자를 사용하면 타임 스탬프의 여러 부분을 얻을 수 있지만 조합하는 방법에 대해서는 알지 못합니다.

해결법

  1. ==============================

    1./usr/lib/python2.6/uuid.py를 보면 알 수 있습니다.

    /usr/lib/python2.6/uuid.py를 보면 알 수 있습니다.

    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
    

    time.time ()에 대한 방정식을 풀면

    time.time()-like quantity = ((timestamp - 0x01b21dd213814000L)*100/1e9)
    

    그래서 사용 :

    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)
    

    그러면 datetime은 uuid.uuid1에 의해 생성 된 UUID와 연관됩니다.

  2. ==============================

    2.다음 정의를 직접 따르는 간단한 수식을 사용할 수 있습니다.

    다음 정의를 직접 따르는 간단한 수식을 사용할 수 있습니다.

    >>> 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)
    
  3. ==============================

    3.또는 TimeUUID 라이브러리를 사용하여 잘못 계산하지 않았 음을 알 수 있습니다.

    또는 TimeUUID 라이브러리를 사용하여 잘못 계산하지 않았 음을 알 수 있습니다.

    import uuid
    import time_uuid
    
    my_uuid = uuid.UUID('{12345678-1234-5678-1234-567812345678}')
    ts = time_uuid.TimeUUID(bytes=my_uuid.bytes).get_timestamp()
    
  4. ==============================

    4.내가 카산드라를 설치했기 때문에 이것을 카산드라와 함께 사용하면 나는 cassandra.util에서 datetime_from_uuid1을 사용할 수 있었다.

    내가 카산드라를 설치했기 때문에 이것을 카산드라와 함께 사용하면 나는 cassandra.util에서 datetime_from_uuid1을 사용할 수 있었다.

    >>> 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)
    
  5. from https://stackoverflow.com/questions/3795554/extract-the-time-from-a-uuid-v1-in-python by cc-by-sa and MIT license