Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2015 22:37:43

maxim83632
Зарегистрирован: 2015-03-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

pywin32 не правильно задается время

Подскажите пожалуйста, почему задается неправильное время, хочу установить 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))

Офлайн

#2 Ноя. 25, 2015 03:16:53

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

pywin32 не правильно задается время

Вероятно вам показывается 02.06.2014 c учетом вашего системного часового пояса, в то время как устанавливаете Вы по UTC, что полностью соответствует документации.



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Ноя. 25, 2015 05:36:15

maxim83632
Зарегистрирован: 2015-03-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

pywin32 не правильно задается время

JOHN_16
Подскажите пожалуйста, что мне надо сделать, чтобы все правильно ставилось?

Офлайн

#4 Ноя. 25, 2015 05:49:32

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

pywin32 не правильно задается время

maxim83632
для начала удостовериться что проблема именно в этом. Для этого узнать какой часовой пояс установлен в системе. Сравнить дату и время которую вы задаете и ту которую система устанавливает. Если разница соответствует часовому поясу, то причина найдена. В таком случае вам надо будет переделать код соответствующим образом, а именно отнять от целевой даты и времени разницу часового пояса. Подробнее об этом можно поговорить после того как мы убедимся что поняли проблему



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#5 Ноя. 25, 2015 12:33:25

maxim83632
Зарегистрирован: 2015-03-24
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

pywin32 не правильно задается время

В общем разобрался со своей проблемой, оказалось, что мне нужно было менять локальное время, а не системное. Сделал, вот так:

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)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version