Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (Flatly)
  • No Skin
Collapse
Brand Logo

NetXMS Forum

  1. Home
  2. Support (Russian)
  3. перевод строки в time

перевод строки в time

Scheduled Pinned Locked Moved Support (Russian)
8 Posts 3 Posters 38.5k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S
    S
    slako
    wrote on last edited by
    #1

    Задача отлавливать подвисшие CLI php скрипты работающих на Win2003.
    Process.CPUTime не подошел - если скрипт подвис и ничего не делает, то возвращаются значения 0.
    Решил попробовать через

    WMI.Query(root\CIMV2,\"select * FROM Win32_Process WHERE Name = 'php.exe'\", CreationDate)
    

    Столкнулся с проблемой как сконвертировать значения этого запроса в объект time чтобы потом просчитать количество секунд которое прошло с начала старта? Значения приходят в виде 20160101235959.123123

    Пробовал парсить как строку

    rawdatetime = string($1);
    tm_datetime = localtime();
    tm_datetime<-year = int32(substr(rawdatetime,1,4));
    tm_datetime<-mon = int32(substr(rawdatetime,5,2));
    tm_datetime<-mday = int32(substr(rawdatetime,7,2));
    tm_datetime<-hour = int32(substr(rawdatetime,9,2));
    tm_datetime<-min = int32(substr(rawdatetime,11,2));
    tm_datetime<-sec = int32(substr(rawdatetime,13,2));
    

    но ругается на

    Error 4 in line 3: Bad arithmetic conversion
    
    1 Reply Last reply
    0
    • A
      A
      Alex Kirhenshtein
      wrote on last edited by
      #2

      Одна из проблем в синтаксисе:

      tm_datetime<-year = int32(substr(rawdatetime,1,4));

      должно быть

      tm_datetime->year = int32(substr(rawdatetime,1,4));

      Но основная проблема – в nxsl сейчас нет поддержки функции mktime.

      1 Reply Last reply
      0
      • S
        S
        slako
        wrote on last edited by
        #3

        @alk said in перевод строки в time:

        Одна из проблем в синтаксисе:

        tm_datetime<-year = int32(substr(rawdatetime,1,4));

        должно быть

        tm_datetime->year = int32(substr(rawdatetime,1,4));

        Так тоже ругался

        Error 15 in line 3: Unknown object's attribute
        

        @alk said in перевод строки в time:

        Но основная проблема – в nxsl сейчас нет поддержки функции mktime.

        точно, получается тогда пока никак.  😞

        1 Reply Last reply
        0
        • K
          K
          kozlov_ao
          wrote on last edited by
          #4

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

          LastRunMin+(LastRunHour*60)+(LastRunDay*LastRunHour*60)+(LastRunMon*LastRunDay*LastRunHour*60)+(LastRunYear*LastRunMon*LastRunDay*LastRunHour*60)
          

          тут учтены переходы между днями, месяцами и годами.
          да, это не timestamp.. это по сути вообще ничего 🙂 но т.к. нужна была просто дельта по времени, этого вполне хватило.

          1 Reply Last reply
          0
          • S
            S
            slako
            wrote on last edited by
            #5

            А как при такой формуле определить делту в минутах?
            Чего-то у меня значения дельты получаются не верны.
            Скрипт такой

            rawdatetime = string($1);
            if(length(rawdatetime) >= 14)
            {
            	starttime_year = format(substr(rawdatetime,1,4),1,0);
            	starttime_mon = format(substr(rawdatetime,5,2),1,0);
            	starttime_mday = format(substr(rawdatetime,7,2),1,0);
            	starttime_hour = format(substr(rawdatetime,9,2),1,0);
            	starttime_min = format(substr(rawdatetime,11,2),1,0);
            	trace(0,"PHP start time is " . starttime_year . "-" . string(starttime_mon) . "-" . starttime_mday . " " . starttime_hour . ":" . starttime_min);
            	starttime_ts = starttime_min+(starttime_hour*60)+(starttime_mday*starttime_hour*60)+(starttime_mon*starttime_mday*starttime_hour*60)+(starttime_year*starttime_mon*starttime_mday*starttime_hour*60);
            	trace(0,"starttime_ts is " . starttime_ts);
            	now = localtime();
            	now_year = now->year;
            	now_mon = now->mon+1;
            	now_mday = now->mday;
            	now_hour = now->hour;
            	now_min = now->min;
            	trace(0,"Now time is " . now_year . "-" . now_mon . "-" . now_mday . " " . now_hour . ":" . now_min);
            	now_ts = now_min+(now_hour*60)+(now_mday*now_hour*60)+(now_mon*now_mday*now_hour*60)+(now_year*now_mon*now_mday*now_hour*60);
            	trace(0,"now_ts is " . now_ts);
            	delta_min = now_ts - starttime_ts;
            	trace(0,"delta_min is " . delta_min);
            	return delta_min;
            }
            return false;
            

            Результат:

            [03-Jan-2016 12:52:39.587] [INFO ] PHP start time is 2016-1-3 10:30
            [03-Jan-2016 12:52:39.587] [INFO ] starttime_ts is 3633030
            [03-Jan-2016 12:52:39.587] [INFO ] Now time is 2016-1-3 12:52
            [03-Jan-2016 12:52:39.587] [INFO ] now_ts is 4359652
            [03-Jan-2016 12:52:39.587] [INFO ] delta_min is 726622
            

            Или это абстрактная величина, которая будет едина для интервала?  К примеру мне нужно генерить эвент когда дельта больше 60 реальных минут.

            1 Reply Last reply
            0
            • K
              K
              kozlov_ao
              wrote on last edited by
              #6

              Сейчас посмотрю... я уже не помню. дело было 2 года назад.

              1 Reply Last reply
              0
              • K
                K
                kozlov_ao
                wrote on last edited by
                #7

                Да, ступил я. В общем смотри:

                LastRunTimestamp = LastRunMin+(LastRunHour*60)+(LastRunDay*LastRunHour*60)+(LastRunMon*LastRunDay*LastRunHour*60)+(LastRunYear*LastRunMon*LastRunDay*LastRunHour*60)
                CurrRunTimestamp = CurrMin+(CurrHour*60)+(CurrDay*LastRunHour*60)+(CurrMon*LastRunDay*LastRunHour*60)+(CurrYear*LastRunMon*LastRunDay*LastRunHour*60)
                if (CurrDay-LastRunDay==1 || CurrMon-LastRunMon==1 || CurrYear-LastRunYear==1){ // При переходе между сутками, месяцами и годами, делаем поправку
                      CurrRunTimestamp = CurrRunTimestamp+60;
                }
                Delta=CurrRunTimestamp-LastRunTimestamp
                

                Как это работает видно в приложенном файле.
                На выходе получаешь реальную дельту в минутах.
                Костыль тот еще, но лучше ничего не получалось придумать в тот момент.


                demo.xlsx

                1 Reply Last reply
                0
                • S
                  S
                  slako
                  wrote on last edited by
                  #8

                  Спасибо, работает!

                  1 Reply Last reply
                  0

                  Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                  Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                  With your input, this post could be even better 💗

                  Register Login
                  Reply
                  • Reply as topic
                  Log in to reply
                  • Oldest to Newest
                  • Newest to Oldest
                  • Most Votes


                  • Login

                  • Don't have an account? Register

                  • Login or register to search.
                  Powered by NodeBB Contributors
                  • First post
                    Last post
                  0
                  • Categories
                  • Recent
                  • Tags
                  • Popular
                  • Users
                  • Groups