Имя: Пароль:
1C
1C 7.7
v7: Смещение времени часового пояса - как получить?
0 Злопчинский
 
28.06.16
16:02
например,

есть комп, на компе есть база, в базе есть документ с временем (положение на оси времени)= 12:00:00
необходимо время документа (для выгрузки наружу) привести к UTC+0.
вопрос: как на компе получить смещение времени - в данном случае часовой пояс на компе = Москва (UTC+3) - вот надо как раз получить значение +3 - как?

Спсб.
1 lubitelxml
 
28.06.16
16:31
напиши вк, через виндовый api стопудов может это получить
2 FIXXXL
 
28.06.16
16:32
УниверсальноеВремя есть в 7.7?
3 Ёпрст
 
28.06.16
17:09
(0) смотри в сторону
GetTimeZoneInformation
4 NikVars
 
28.06.16
17:14
(3) И еще зона может гулять +-час...
5 Beretta
 
28.06.16
17:34
(0)
Функция ВариантВистаИСтарше()
    
    Локатор = СоздатьОбъект("WbemScripting.SWbemLocator");
    Сервис = Локатор.ConnectServer(".");
    Набор = Сервис.ExecQuery("SELECT * FROM Win32_ComputerSystem");
    
    Запись = Набор.ItemIndex(0);
    
    Сдвиг = Запись.CurrentTimeZone / 60;
    Возврат Сдвиг;
    
КонецФункции    

Функция ВариантСкрипт()

    Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language="vbscript";
    Скрипт.AddCode("
        |function GetGMTOffset()
        |    set Service = GetObject(""winmgmts:\\.\root\cimv2"")
        |    set Items = Service.ExecQuery(""SELECT * FROM Win32_ComputerSystem"")
        |    for each Item In Items
        |        GetGMTOffset = Item.CurrentTimeZone / 60
        |        exit for
        |    next
        |end function
        |");

    Сдвиг = Скрипт.Run("GetGMTOffset");
    Возврат Сдвиг;
КонецФункции    

Процедура Сформировать()

    Сообщить("1. Сдвиг от GMT в часах " + ВариантВистаИСтарше());
    Сообщить("2. Сдвиг от GMT в часах " + ВариантСкрипт());
    
КонецПроцедуры
6 NikVars
 
28.06.16
17:37
(5) А как тут решается проблема ошибки зоны +- час?!
7 ptiz
 
28.06.16
17:45
еще можно покурить
"Select * from Win32_TimeZone"
8 Beretta
 
28.06.16
17:48
(6) Нет никакой ошибки. Есть необновленные ОС, которые не знают про правильные часовые пояса. Любые средства получения будут возвращать только то, что знает ОС.

Впрочем, можно позвать Serginio1, он расскажет как получать через дотнет и вебсокеты время на серверах Вашингтона.
9 Злопчинский
 
29.06.16
00:31
Понял. спасибо. как-то так это все и представлял. завтра попробую встроить ларечнику (выгрузка в Гифтоман-сервис" - облако консолидации чеков)
10 Злопчинский
 
29.06.16
00:32
Виста и старше не покатит. как минимум должно работать в хрюне
11 Злопчинский
 
29.06.16
00:57
проверил (5) на винсервер2008r2
- работает.
12 Злопчинский
 
29.06.16
01:12
(7) осилил методом подобия по (5)

Функция ВариантСкрипт2()

    Скрипт= СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language="vbscript";
    Скрипт.AddCode("
        |function GetGMTOffset()
        |    set Service = GetObject(""winmgmts:\\.\root\cimv2"")
        |    set colTimeZone = Service.ExecQuery(""Select * from Win32_TimeZone"")
        |    for each objTimeZone In colTimeZone
        |        GetGMTOffset = objTimeZone.Bias/60
        |        exit for
        |    next
        |end function
        |");

    Сдвиг = Скрипт.Run("GetGMTOffset");
    Возврат Сдвиг;
КонецФункции
13 Злопчинский
 
29.06.16
01:13
дышим (курить вредно) здесь мало-мало https://msdn.microsoft.com/en-us/library/aa394498(v=vs.85).aspx
14 Злопчинский
 
29.06.16
01:22
(3) я - собака.
почитал интернет
понял.
но сам говорить не могу.
не программер я...
как вызвать из 1С - хз
15 Злопчинский
 
29.06.16
01:24
интернет - великая вещь
но все пути ведут на мисту.
Епрст раскололся (моложе тогда был, неопытнее, болтал много)

jscript в 1с
16 Garykom
 
29.06.16
01:25
(12) Это чушь полная ибо на целевом компе может быть кривой +GMT (неправильный часовой пояс).
Особенно это вероятно на хрюне без синхронизации времени и отменах/вводах перевода времени на летнее/зимнее.

Т.е. часы то стоят верно, а вот пояс в системе нет.
Нужно смотреть и смещение/пояс из системы и сравнить текущее время со временем по UTC полученным по инету.
17 Злопчинский
 
29.06.16
01:32
(16) угу, если инет есть.
и даже если есть - откуда узнать что в инете время верное - может там тоже за системой никто не следит ;-)
18 Злопчинский
 
29.06.16
01:35
вариант от абрахамса

Функция ВариантСкрипт3()

    Скрипт=СоздатьОбъект("MSScriptControl.ScriptControl");
    Скрипт.Language="jscript";
    Сдвиг=Скрипт.Eval("new Date()").getTimezoneOffset(0);
    Возврат Сдвиг/60;
    
КонецФункции  

..
правда нифига не понял
getTimezoneOffset(0) - ноль в скобках это что? индекс в структуре?
19 Garykom
 
29.06.16
01:40
Вот реально пример решения "ненужной задачи".

Сделать в обработке выгрузки обязательную настройку "укажите корректировку для часового пояса данных в базе" и дальше уже "выгружальщик" пусть себе репу чешет.

В скобках для понятливости что от него хотят написать "Например Москва +3".
20 Злопчинский
 
29.06.16
02:26
(19) это для сильно умных юзверей. фантом. моргана. мечта.