Форум сайта python.su
0
Подскажите пожалуйста, почему задается неправильное время, хочу установить 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))
Офлайн
221
Вероятно вам показывается 02.06.2014 c учетом вашего системного часового пояса, в то время как устанавливаете Вы по UTC, что полностью соответствует документации.
Офлайн
0
JOHN_16
Подскажите пожалуйста, что мне надо сделать, чтобы все правильно ставилось?
Офлайн
221
maxim83632
для начала удостовериться что проблема именно в этом. Для этого узнать какой часовой пояс установлен в системе. Сравнить дату и время которую вы задаете и ту которую система устанавливает. Если разница соответствует часовому поясу, то причина найдена. В таком случае вам надо будет переделать код соответствующим образом, а именно отнять от целевой даты и времени разницу часового пояса. Подробнее об этом можно поговорить после того как мы убедимся что поняли проблему
Офлайн
0
В общем разобрался со своей проблемой, оказалось, что мне нужно было менять локальное время, а не системное. Сделал, вот так:
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
Отредактировано maxim83632 (Ноя. 25, 2015 12:33:41)
Офлайн