Найти - Пользователи
Полная версия: pywin32 не правильно задается время
Начало » Python для новичков » pywin32 не правильно задается время
1
maxim83632
Подскажите пожалуйста, почему задается неправильное время, хочу установить 01.06.2014, а устанавливается 02.06.2014. Всю голову уже себе сломал

import datetime
import win32api
def set_date(day, month, year):
    current_date = datetime.datetime.utcnow().time()
    win32api.SetSystemTime(year, month, 0, day, current_date.hour, 
                           current_date.minute, current_date.second, 
                           current_date.microsecond // 1000)
print(set_date(1, 6, 2014))
JOHN_16
Вероятно вам показывается 02.06.2014 c учетом вашего системного часового пояса, в то время как устанавливаете Вы по UTC, что полностью соответствует документации.
maxim83632
JOHN_16
Подскажите пожалуйста, что мне надо сделать, чтобы все правильно ставилось?
JOHN_16
maxim83632
для начала удостовериться что проблема именно в этом. Для этого узнать какой часовой пояс установлен в системе. Сравнить дату и время которую вы задаете и ту которую система устанавливает. Если разница соответствует часовому поясу, то причина найдена. В таком случае вам надо будет переделать код соответствующим образом, а именно отнять от целевой даты и времени разницу часового пояса. Подробнее об этом можно поговорить после того как мы убедимся что поняли проблему
maxim83632
В общем разобрался со своей проблемой, оказалось, что мне нужно было менять локальное время, а не системное. Сделал, вот так:
class SYSTEMTIME(ctypes.Structure):
    _fields_ = [
        ('wYear', ctypes.c_int16),
        ('wMonth', ctypes.c_int16),
        ('wDayOfWeek', ctypes.c_int16),
        ('wDay', ctypes.c_int16),
        ('wHour', ctypes.c_int16),
        ('wMinute', ctypes.c_int16),
        ('wSecond', ctypes.c_int16),
        ('wMilliseconds', ctypes.c_int16)]
 
 
def set_date(day, month, year):
    CurrentTime = SYSTEMTIME()
    lpSystemTime = ctypes.pointer(CurrentTime)
    ctypes.windll.kernel32.GetLocalTime(lpSystemTime)
    for attr, value in {'wDay': day, 'wMonth': month, 'wYear': year}.items():
        setattr(CurrentTime, attr, value)
    ctypes.windll.kernel32.SetLocalTime(CurrentTime)
 
 
def get_date():
    CurrentTime = SYSTEMTIME()
    lpSystemTime = ctypes.pointer(CurrentTime)
    ctypes.windll.kernel32.GetLocalTime(lpSystemTime)
    return CurrentTime.wDay, CurrentTime.wMonth, CurrentTime.wYear
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB