dwg.ru forum rss xml
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как с помощью функций autolisp добраться до онлайн времени?

Как с помощью функций autolisp добраться до онлайн времени?

Версия для печати
 
Ответ
Опции темы Поиск в этой теме
Непрочитано 02.07.2018, 10:46 #1
Как с помощью функций autolisp добраться до онлайн времени?
OKJI
 
AutoLISP
 
Харьков
Регистрация: 19.06.2018
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™

OKJI вне форума Вставить имя

Здравствуйте дорогие коллеги!)
Возникла необходимость сверять время при запуске программного модуля.
Время на компьютере может меняться пользователем, и в следствии чего отличаться от реального времени.

Хотелось бы как-то добраться до онлайн времени...
Может можно как-то по ссылке, или может быть есть где-то время сети в реестре... правда я не нашел там...
Подскажите пожалуйста как считать время сети с помощью программных возможностей AutoLISP?
__________________
Вечность это:
 (while T)

Последний раз редактировалось Кулик Алексей aka kpblc, 02.07.2018 в 10:51.
Просмотров: 1017
 
Непрочитано 02.07.2018, 10:57
1 | #2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,712


Попробуй коды http://www.cadtutor.net/forum/showth...-date-and-time , http://www.theswamp.org/index.php?to...7974#msg447974
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.07.2018, 11:04
#3
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Чтобы прочитать эти ссылки, мне нужно зарегистрироваться на том форуме...
А там проверочное слово: "Фамилия генерального директора Аутодеск" bass не подходит... как мне там зарегестрироваться?
__________________
Вечность это:
 (while T)
OKJI вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.07.2018, 11:11
1 | 1 #4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 35,712


код с theswamp:
Код:
[Выделить все]
 ;;---------------------=={ Internet Time }==------------------;;
;;                                                            ;;
;;  Returns the date and/or UTC time as a string in the       ;;
;;  format specified. Data is sourced from a NIST server.     ;;
;;------------------------------------------------------------;;
;;  Author: Lee Mac, Copyright © 2011 - www.lee-mac.com       ;;
;;------------------------------------------------------------;;
;;  Arguments:                                                ;;
;;  format - string specifying format of returned information ;;
;;           using the following identifiers to represent     ;;
;;           date & time quantities:                          ;;
;;           YYYY = 4-digit year                              ;;
;;           YY   = Year, MO = Month,   DD = Day              ;;
;;           HH   = Hour, MM = Minutes, SS = Seconds          ;;
;;------------------------------------------------------------;;
;;  Returns:  String containing formatted date/time data      ;;
;;------------------------------------------------------------;;

(defun LM:InternetTime ( format / result rgx server xml )
    (setq server "http://time.nist.gov:13")
    (setq result
        (vl-catch-all-apply
            (function
                (lambda ( / str )
                    (setq xml (vlax-create-object "MSXML2.XMLHTTP.3.0"))
                    (setq rgx (vlax-create-object "VBScript.RegExp"))
                    (vlax-invoke-method xml 'open "POST" server :vlax-false)
                    (vlax-invoke-method xml 'send)
                    (if (setq str (vlax-get-property xml 'responsetext))
                        (progn
                            (vlax-put-property rgx 'global     actrue)
                            (vlax-put-property rgx 'ignorecase actrue)
                            (vlax-put-property rgx 'multiline  actrue)
                            (setq str (strcat " " (itoa (jtoy (+ (atoi (substr str 2 5)) 2400000.5))) (substr str 7)))
                            (mapcar
                                (function
                                    (lambda ( a b )
                                        (vlax-put-property rgx 'pattern a)
                                        (setq format (vlax-invoke rgx 'replace format b))
                                    )
                                )
                               '("YYYY" "YY" "MO" "DD" "HH" "MM" "SS")
                               '( "$1"  "$2" "$3" "$4" "$5" "$6" "$7")
                            )
                            (vlax-put-property rgx 'pattern
                                (strcat
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:[^\\d]+)([\\d]+)"
                                    "(?:[^\\d]+)([\\d]+)(?:.+)\\n"
                                )
                            )
                            (vlax-invoke-method rgx 'replace str format)
                        )
                    )
                )
            )
        )
    )
    (if xml  (vlax-release-object xml))
    (if rgx  (vlax-release-object rgx))
    (if (not (vl-catch-all-error-p result))
        result
    )
)

;; Julian Date to Calendar Year - Lee Mac
;; Algorithm from: Meeus, Jean.  Astronomical Algorithms.
(defun jtoy ( j / a b c d )
    (setq j (fix j)
          a (fix (/ (- j 1867216.25) 36524.25))
          b (+ (- (+ j 1 a) (fix (/ a 4))) 1524)
          c (fix (/ (- b 122.1) 365.25))
          d (fix (/ (- b (fix (* 365.25 c))) 30.6001))
    )
    (fix (- c (if (< 2 (fix (if (< d 14) (1- d) (- d 13)))) 4716 4715)))
)
Время возвращается для UTC. Учет часового пояса предложил VovKa:
Код:
[Выделить все]
 (vl-registry-read
  "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation\\"
  "ActiveTimeBias"
)
P.S. Коды не проверял.
__________________

---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.07.2018, 12:01
#5
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
код с theswamp:
Ох и тяжко идет... крутил вертел этот код... ни чего не выходит... нуль дает и хоть ты тресни!...
придется пошагово вникать в каждую строку... и каждую функцию учить...

Код:
[Выделить все]
 _$ (LM:InternetTime "DD.MO.YYYY")
nil
А за код огромное спасибо!!)) В выражении:
Код:
[Выделить все]
 _$ (vlax-get-property xml 'responsetext)
"\n58301 18-07-02 09:03:16 50 0 0 781.1 UTC(NIST) * \n"
_$ 
Заметил необходимую мне серверную дату, которая ни как не зависит от времени на компе!!!))
__________________
Вечность это:
 (while T)
OKJI вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.07.2018, 12:15
#6
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™


Это вообще странное условие... оно ни когда не будет выполняться... не будет Т

----- добавлено через ~19 мин. -----
Извиняюсь за преждевременный кипишь... Програмка отлично работает... просто не всегда срабатывает... 5 - 10 повторений гарантируют 100% выход даты... видимо эту програмку нужно доработать и увеличить время ожидания ответа сервера с временем...
Код:
[Выделить все]
 $ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
" 1858 denied -- too many requests"
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
" 1858 denied -- too many requests"
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
"02/07/18, 09:29:35"
_$ (LM:InternetTime "DD/MO/YY, HH:MM:SS")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
"02.07.2018"
_$ (LM:InternetTime "DD.MO.YYYY")
"02.07.2018"
_$ (LM:InternetTime "DD.MO.YYYY")
"02.07.2018"
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
nil
_$ (LM:InternetTime "DD.MO.YYYY")
"02.07.2018"
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_1.png
Просмотров: 20
Размер:	27.2 Кб
ID:	204079  
__________________
Вечность это:
 (while T)
OKJI вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.07.2018, 12:59
#7
trir


 
Регистрация: 18.12.2010
Сообщений: 2,907


Цитата:
*.nist.gov — расположены в США, из-за «большого» пинга иногда случаются жуткие «выбросы».
https://habr.com/post/79461/
Цитата:
Users of the NIST "DAYTIME" protocol on tcp port 13 are also strongly encouraged to upgrade to the network time protocol, which provides greater accuracy and requires less network bandwidth
https://tf.nist.gov/tf-cgi/servers.cgi

----- добавлено через ~2 мин. -----
Simple Network Time Protocol

----- добавлено через ~12 мин. -----
Цитата:
Это вообще странное условие... оно ни когда не будет выполняться... не будет Т
ну и что? Скрипачь Т не нужен - главное что не nil
Expression evaluated if testexpr is not nil.
trir вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 02.07.2018, 18:38
#8
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от trir Посмотреть сообщение
Т не нужен - главное что не nil
Век живи век учись....
Спасибо
__________________
Вечность это:
 (while T)
OKJI вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 02.07.2018, 21:49
| 1 #9
Vov.Ka


 
Регистрация: 21.07.2008
Луцьк
Сообщений: 150


Цитата:
Сообщение от OKJI Посмотреть сообщение
просто не всегда срабатывает... 5 - 10 повторений гарантируют 100% выход даты... видимо эту програмку нужно доработать и увеличить время ожидания ответа сервера с временем...
на форуме, на котором ты не можешь зарегистрироваться есть еще один код: https://www.theswamp.org/index.php?t...2867#msg542867
он работает надежнее потому, что там используется http протокол, и можно использовать любой сервер хоть google.com хоть dwg.ru

Цитата:
Сообщение от OKJI Посмотреть сообщение
век учись....
ну тогда регистрация на theswamp обязательна
Vov.Ka вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.07.2018, 08:06
1 | 1 #10
valerik88


 
Регистрация: 02.07.2016
Сообщений: 140


Вот код с сайта http://www.theswamp.org/index.php?topic=48216.15

Код:
[Выделить все]
 (defun vk_GetRemoteFileHeaders (RemoteFileName Headers / objHTTP Result)
  (if (setq objHTTP (vlax-create-object "WinHTTP.WinHTTPRequest.5.1"))
    (progn (setq Result	(vl-catch-all-apply
			  (function
			    (lambda ()
			      (vlax-invoke-method objHTTP "Open" "HEAD" RemoteFileName :vlax-false)
			      (vlax-invoke objHTTP "Send")
			      (if (= (vlax-get-property objHTTP "Status") 200)
				(mapcar	(function (lambda (h / r)
						    (setq r (vl-catch-all-apply
							      'vlax-invoke-method
							      (list objHTTP "GetResponseHeader" h)
							    )
						    )
						    (cons h
							  (if (not (vl-catch-all-error-p r))
							    r
							  )
						    )
						  )
					)
					Headers
				)
			      )
			    )
			  )
			)
	   )
	   (vlax-release-object objHTTP)
	   (if (and Result (not (vl-catch-all-error-p Result)))
	     Result
	   )
    )
  )
)

(defun vk_GetInternetTime (/)
  (cdar (vk_GetRemoteFileHeaders "http://www.google.com" (list "Date")))
)
Код:
[Выделить все]
 (vk_GetInternetTime )
Выдаёт строку "Tue, 03 Jul 2018 05:05:08 GMT"

Насколько понял просто берёт из http заголовков. Обратиться можно к любому сайту


Только понял, что это тот же код, что из сообщения от Вовки выше.
valerik88 вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Непрочитано 03.07.2018, 09:34
#11
Setvar

Всего понемногу
 
Регистрация: 10.02.2007
Москва
Сообщений: 564


Цитата:
Сообщение от OKJI Посмотреть сообщение
Время на компьютере может меняться пользователем
Не только. При разрядке системной батарейки системное время тоже может сильно меняться. Однако, это дефект можно нейтрализовать синхронизацией системного времени с интернетом. Но тогда бессмысленна задумка автора темы. IMHO.
__________________
Установи FILEDIA в 1 и не парься.
Setvar вне форума вставить имя Обратить внимание модератора на это сообщение  
 
Автор темы   Непрочитано 10.07.2018, 12:43
#12
OKJI

AutoLISP
 
Регистрация: 19.06.2018
Харьков
Сообщений: 66
Отправить сообщение для OKJI с помощью Skype™


Цитата:
Сообщение от Setvar Посмотреть сообщение
Не только. При разрядке системной батарейки системное время тоже может сильно меняться. Однако, это дефект можно нейтрализовать синхронизацией системного времени с интернетом. Но тогда бессмысленна задумка автора темы. IMHO.
Почему бессмысленна? мне не важно какое системное время у пользователя истинное или ложное, я к нему обращаться даже не буду.
Мне нужно только истинное время которое я возьму, в обход системного времени, из интернета...
__________________
Вечность это:
 (while T)
OKJI вне форума вставить имя Обратить внимание модератора на это сообщение  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Как с помощью функций autolisp добраться до онлайн времени?

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли в Autolisp возможность задавать необязательные параметры для функций? valerik88 LISP 31 18.07.2016 10:47
Как задать в каждой точке определенной линии переменное во времени давление? Leha_Pskov ANSYS 3 23.01.2012 11:38
Извлечение значений атрибутов блоков AutoCAD Electrical с помощью AutoLisp zaraki_kenpachi LISP 16 19.02.2011 15:30
AutoLISP: Просачивание локальных переменных в тело используемых в выражении функций Supermax LISP 22 26.10.2010 00:27
Конвертация файлов старых версий с помощью AutoLISP kometa AutoCAD 4 12.11.2006 17:25

|| Главная || Каталог САПР || Тендеры || Публикации || Объявления || Биржа труда || Download || Галерея ||
|| Библиотека || Кунсткамера || Каталог предприятий || Контакты || Файлообменник || Блоги ||