abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:22 | Komunita

    Na čem aktuálně pracují vývojáři GNOME a KDE Plasma? Pravidelný přehled novinek v Týden v GNOME a Týden v KDE Plasma.

    Ladislav Hagara | Komentářů: 0
    dnes 12:00 | Humor

    FlappyFavi, hra Flappy Bird v ikoně Favicon. Nefunguje na mobilech.

    Ladislav Hagara | Komentářů: 0
    včera 13:44 | IT novinky Ladislav Hagara | Komentářů: 0
    včera 03:44 | Komunita

    Všem na AbcLinuxu vše nejlepší k Valentýnu aneb Dni lásky ke svobodnému softwaru (I love Free Software Day, Mastodon, 𝕏).

    Ladislav Hagara | Komentářů: 25
    13.2. 19:22 | Komunita

    Vývojáři openSUSE Tumbleweed oznámili, že u nových instalací se ve výchozím stavu přechází z AppArmor na SELinux. Uživatelé, kteří chtějí zůstat na AppArmor si mohou AppArmor vybrat v instalátoru.

    Ladislav Hagara | Komentářů: 0
    13.2. 16:44 | Komunita

    Hector "marcan" Martin skončil jako vedoucí projektu Asahi Linux aneb Linux na Apple Siliconu. Projekt ale pokračuje dál.

    Ladislav Hagara | Komentářů: 49
    13.2. 16:33 | Nová verze

    PostgreSQL byl vydán ve verzích 17.3, 16.7, 15.11, 14.16 a 13.19. Řešena je zranitelnost CVE-2025-1094 s CVSS 8.1 a více než 70 chyb.

    Ladislav Hagara | Komentářů: 0
    13.2. 14:22 | Humor

    Dnes je Světový den rádia. Použili jste někdy GNU Radio?

    Ladislav Hagara | Komentářů: 11
    13.2. 12:33 | IT novinky

    Před 33 lety, ve čtvrtek 13. února 1992, se tehdejší Česká a Slovenská Federativní Republika oficiálně (a slavnostně) připojila k Internetu.

    Ladislav Hagara | Komentářů: 2
    12.2. 19:44 | Nová verze

    Byla vydána nová verze 9.10 z Debianu vycházející linuxové distribuce DietPi pro (nejenom) jednodeskové počítače. Přehled novinek v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    Rozcestník

    Dotaz: porovnání datumů

    28.5.2007 10:49 yorik
    porovnání datumů
    Přečteno: 547×
    Ahoj, potřeboval bych scriptík, který dostane 2 časy a datum a pakliže ten druhý čas je menší než první, tak vrátí datum +1d. Awk bohužel s datumy a časy zacházet neumí, tak jsem se pokusil podle nápověd a diskuzí něco stvořit v perlu (který neumím), ale nedaří se mi ani zadat datum.

    perl -e '@cas = localtime(?);‘

    Prosím o radu, alespoň co místo otazníku( „YYYY-MM-DD“ - nefunguje). Případně i další rady uvítám. Předem velice děkuji. Jirka

    Odpovědi

    28.5.2007 10:56 stak | skóre: 4
    Rozbalit Rozbalit vše Re: porovnání datumů
    To datum bude vždycky stejné, nebo se bude lišit?

    DN
    28.5.2007 11:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: porovnání datumů
    elegantnejšie riešenie (v perl-i):
    use Class::Date;
    
    my $time1 = Class::Date::date ('2007-05-28 00:00:00');
    my $time2 = Class::Date::date ('2007-05-28 24:00:00');
    
    $time1 += '1D'
      if $time1 < $time2;
    
    # my $now = Class::Date::now;
    # my $now2 = Class::Date::date (time);
    # my $now3 = Class::Date::date (`date +%s`);
    
    pre viac info by to chcelo viac popisu problému.
    28.5.2007 11:09 stak | skóre: 4
    Rozbalit Rozbalit vše Re: porovnání datumů
    Je asi hodně způsobů, já bych to řešil takto.

    use strict; use warnings; use Date::Simple; use Time::Simple;

    my ( $cas1, $cas2, $datum ) = ( $ARGV[0], $ARGV[1], $ARGV[2] );

    my $ocas1 = Time::Simple->new($cas1);

    if ( $ocas1 < $cas2 ) { my $odatum = Date::Simple->new($datum); $odatum = $odatum->next; print "$odatum\n"; }
    28.5.2007 12:16 yorik
    Rozbalit Rozbalit vše Re: porovnání datumů
    Napsal jsem ty scripty do souboru a spouštím to jako „perl názevsouboru“, ale bohužel to nechodí. Hlásí to:

    1 script:

    syntax error in file pokus.perl at line 1, next 2 tokens "use Class" Execution of pokus.perl aborted due to compilation errors.

    2 script:

    syntax error in file pokus1.perl at line 1, next 2 tokens "use strict" syntax error in file pokus1.perl at line 7, next 2 tokens "my $odatum " syntax error in file pokus1.perl at line 7, next 2 tokens "->" Execution of pokus1.perl aborted due to compilation errors.

    Prosím o radu, co dělám špatně. Předem velice děkuji.

    Podrobnější popis problému: V jedné databázi jsou uloženy časy a jedno datum ( např. datum, čas1, čas2) a já je potřebuji přenést do jiné databáze, kde je ale uloženo datum1, čas1, datum2, čas2. Z té první databáze tedy selectem zjistím hodnoty a pomocí awk vytvářím sql dotaz, který zazálohuje původní řádky a udělá update na nové hodnoty. Ale protože nemám v první databázi datum2, potřebuji ho zjistit - proto to porovnání časů. Tak jsem chtěl z AWK zavolat script, který mi ho na základě časů „dopočítá“ (příčte 1D, jestliže čas1 > čas2).
    28.5.2007 12:27 stak | skóre: 4
    Rozbalit Rozbalit vše Re: porovnání datumů
    Problém bude asi v tom:

    Pokuď pouštím skript v Linuxu je nutno jako první řádek definovat interpret, který mi zpracuje daný skript.

    #!/usr/bin/perl -w

    Popřípadě změnit cestu.

    Dále bude potřeba stáhnout a doinstalovat moduly z http://www.cpan.org

    http://search.cpan.org/CPAN/authors/id/Y/YV/YVES/Date-Simple-3.02.tar.gz http://search.cpan.org/CPAN/authors/id/L/LG/LGODDARD/Time-Simple-0.052.tar.gz

    Mělo by stačit stáhnout, rozbalit, přesunout se do daného adresáře a napsat:

    perl makefile.pl make make install

    Nakonec spustit skript s argumenty:

    test.pl "08:00:00" "09:00:00" "2007-05-25"

    Mělo by to fungovat.

    Obdobné řešení bude i u první varianty, akorát se stáhne jiný modul.

    DN
    28.5.2007 13:34 yorik
    Rozbalit Rozbalit vše Re: porovnání datumů
    Jo, dík, už to hází jinou a logičtější hlášku. Nemůže najít Simple.pm - problém je, že na tenhle server se nic nainstalovat nedá - je klíčový a dokud funguje, tak ho nikdo "dráždit" nebude.
    28.5.2007 14:35 stak | skóre: 4
    Rozbalit Rozbalit vše Re: porovnání datumů
    No instalovat by se ani nic nemuselo, stačí se podívat, kde to hledá ten modul a pak tam uložit jenom soubor simple.pm.

    DN
    28.5.2007 15:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: porovnání datumů
    export PERL5LIB=/home/user/lib/perl5/
    
    28.5.2007 13:18 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: porovnání datumů
    hmm, tie chyby sa mi nezdajú, nepozná "use strict" ???

    k problému: aritmetiku nechať na databázu: (hint)

    select datum, cas1, cas2, datum+1D, datum || cas1, datum || cas2;
    
    posledné dva stĺpce by mali generovať dátum a čas ako jeden reťazec, reťazcovo provnávateľný (iso formát). A potom v podmienke vybrať buď datum alebo datum+1D
    28.5.2007 13:31 yorik
    Rozbalit Rozbalit vše Re: porovnání datumů
    Jo, taky mě už napadlo nechat si to datum vypsat selectem, ale přece jenom vypočítat se mi ho zdálo lepší ... a taky jsem se mohl něco přiučit. Ale i tohle je varianta a možná na ní bohužel i dojde.
    28.5.2007 14:18 happy barney | skóre: 34 | blog: dont_worry_be_happy
    Rozbalit Rozbalit vše Re: porovnání datumů
    aritmetika času je trochu náročnejšia :-)
    iný variant je prekonvertovať čas na epoch, potom +1D je +86400 :-)
    28.5.2007 13:04 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: porovnání datumů
    Jsem řešil něco podobného při vytváření souboru aby když konec hodin bude menší tj zasahuje do druhého dne se přičetl den aby konec seděl.

    Viz:
    fprintf(fw,"BEGIN:VCALENDAR\r\n");
    fprintf(fw,"VERSION:2.0\r\n");
    fprintf(fw, "BEGIN:VEVENT\r\n");
    fprintf(fw, "SUMMARY:%s\r\n", linka);
    //fprintf(fw, "DESCRIPTION:%s\r\n", linka);
    fprintf(fw, "CATEGORIES:Prace\r\n");
    fprintf(fw, "DTSTART:%04d%02d%02dT%02d%02d00\r\n", rok, mesic, den, zacatek_hodiny, zacatek_minuty);
    if( zacatek_hodiny < konec_hodiny) fprintf(fw, "DTEND:%04d%02d%02dT%02d%02d00\r\n", rok, mesic, den, konec_hodiny, konec_minuty);
    else fprintf(fw, "DTEND:%04d%02d%02dT%02d%02d00\r\n", rok, mesic, den+1, konec_hodiny, konec_minuty);
    fprintf(fw, "AALARM:%04d%02d%02dT%02d%02d00\r\n", rok, mesic, den, zacatek_hodiny-1, zacatek_minuty);
    fprintf(fw, "END:VEVENT\r\n");
    fprintf(fw,"END:VCALENDAR\r\n");
    
    28.5.2007 13:14 yorik
    Rozbalit Rozbalit vše Re: porovnání datumů
    Nezkoušel jsem to, ale mám dotaz, co to udělá např. 31.12. když přičteš den? „Přechroustá“ si to přechody měsíců samo? Dík Jirka
    28.5.2007 13:35 Petr Šobáň | skóre: 80 | blog: soban | Olomouc
    Rozbalit Rozbalit vše Re: porovnání datumů
    Ha to mě nenapadlo grrrr to je vyjímečná situace.

    U těch mých dat je pouze jedna položka co přechází přes půlnoc a ještě se opakuje jednou za 48 dní takže to mě uteklo.

    Už to půjdu opravit. Díky za nakopnutí.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.