Portál AbcLinuxu, 10. května 2025 10:02

Dotaz: Počet časových úseků mezi dvěma časy

Přemek Vyhnal avatar 8.2.2010 01:53 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Počet časových úseků mezi dvěma časy
Přečteno: 399×
Odpovědět | Admin
Zdravím,

Potřeboval bych poradit nápad, jak nějak pěkně vyřešit toto:

V tabulce mám nějaké něco (činnost, událost, ...) co začne v čase start a běží to po dobu duration sekund. Každý den se to v X hodin zastaví a v Y zase rozeběhne.

Mám:
CREATE TABLE `neco` (
  `start` timestamp,
  `duration` int 
)
+ někde vedle hodnoty X a Y (nebo timestampy, to je jedno)

Duration je čistý čas běhu. Jen počet sekund po který ta věc "běží".

A potřeboval bych z toho pro každý řádek vypočítat čas (timestamp) konce.

Příklad:

Duration: 24 hodin

Start: 1.1. 20:00 (uběhlo již 0 hodin z duration)

První zastavení: 2.1. 1:00 (uběhlo již 5 hodin z duration)

Rozeběhnutí: 2.1. 9:00 (uběhlo již 5 hodin z duration)

Další zastavení: 3.1. 1:00 (uběhlo již 21 hodin z duration)

Rozeběhnutí: 3.1. 9:00 (uběhlo již 21 hodin z duration)

Konec?: 3.1. 12:00 (uběhlo již 24 hodin z duration)

~

Děkuji za jakékoliv popostrčení
NO RAPTORS!
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

8.2.2010 02:30 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
Odpovědět | | Sbalit | Link | Blokovat | Admin
napadají mě dvě řešení:
1.
Přidat do tabulky položku "runtime" - doba běhu a tu při každém ukončení aktualizovat. Při startu by se pak prováděla kontrola jak dlouho je ještě možno běžet.

2.
Vytvořit tabulku s položkami ID, start, stop a při startu zapsat start time a při ukončení stop time. Při dalším spuštění by se vytvořil nový záznam a vypočetla se doba běhu. V tomto případě by existovaly záznamy, kdy byl proces v běhu.
Netvrdím to, ale možná je to pravda.
Přemek Vyhnal avatar 8.2.2010 03:17 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
Líbilo by se mi to nějak aby:
  1. se nemuselo nic dělat při zastavení/spuštění
  2. nemusely být uloženy časy každého zastavení/spuštění protože budou každý den stejné. Např 1:00 vypnout, v 9:00 zapnout. Každý den.
Myslím, že všechna potřebná data už tam mám, že by to mělo jít nějak dopočítat. Asi by to taky šlo nějakým cyklem až v aplikaci.

Určitě ale díky za odpověď. Možná to tak nějak udělám.
NO RAPTORS!
8.2.2010 03:48 Miklik | skóre: 27 | Krnov
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
Pokud je ten čas zastavení pořád stejný, tak to není problém dopočítat s nějakými podmínkami. Ze zadání mi není přesně jasné, co je konstantní a co se mění.
Netvrdím to, ale možná je to pravda.
Přemek Vyhnal avatar 8.2.2010 13:47 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
ano, je pevný čas zastavení a pevný čas rozeběhnutí, kdy se každý den všechny procesy zastaví/rozeběhnou.

Určitě to není problém dopočítat, jen přemýšlím jak nejlépe. Chtěl jsem aby to nebylo až v aplikaci ale v SQL. Ale vypadá to že bude potřeba cyklus aby se kontrolovalo jestli se ten konec nenatahl do dalsiho obdobi kdy to stoji.
NO RAPTORS!
8.2.2010 09:02 Robo
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
Odpovědět | | Sbalit | Link | Blokovat | Admin
no a aku databazu pouzivas? asi by bolo najjednoduchsie pouzivat v 'start' stlpci unix timestamp a ostatne dopocitas jednoducho
Přemek Vyhnal avatar 8.2.2010 13:53 Přemek Vyhnal | skóre: 24 | blog: Toto není blog! | Dobřichovice
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
MySQL

timestamp to je, jde mi o ten zpusob jednoducheho dopocitani ;)

Tak treba:

end = start + duration + pocet_zastaveni * delka_zastaveni

pocet_zastaveni ?=

;)
NO RAPTORS!
11.2.2010 10:30 Robo
Rozbalit Rozbalit vše Re: Počet časových úseků mezi dvěma časy
ja by som to vyriesil, ze by som dal ku kazdej cinnosti pole "DURATION_LEFT" a pri kazdom zastaveni by sa z toho odpocitalo, kolko uz odbehlo medzi poslednym start-stop; aplikacia by musela checkovat, ci este ma bezat a dokedy

Založit nové vláknoNahoru

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

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.