Search code examples
python-3.xdatetimepython-importtimezone-offsetwinreg

Getting the time component from winreg.QueryInfoKey


It is possible to find out when a Windows registry key was last modified with the following function:

import datetime
import time
import winreg


def query_info_key(key):
    return datetime.datetime(1601, 1, 1) + datetime.timedelta(
        0,
        -(time.altzone if time.localtime().tm_isdst else time.timezone),
        winreg.QueryInfoKey(key)[2] / 10
    )

Is there a way this could be written to avoid referencing the time module?


Solution

  • Yes, you only need to use the datetime module and can avoid your your extra import like so:

    import datetime
    import winreg
    
    
    def query_info_key(key):
        return datetime.datetime(1601, 1, 1) + \
               datetime.timedelta(microseconds=winreg.QueryInfoKey(key)[2] / 10) + \
               datetime.datetime.now(datetime.timezone.utc).astimezone().utcoffset()
    

    Alternatively, you can still improve your original code if time is allowed to be an import:

    import datetime
    import time
    import winreg
    
    
    def query_info_key(key):
        return datetime.datetime(1601, 1, 1) + datetime.timedelta(
            0,
            time.localtime().tm_gmtoff,
            winreg.QueryInfoKey(key)[2] / 10
        )