Uložení času   zodpovězená otázka

VB.NET, .NET

Má VB proměnnou pro uložení času? DateTime to je lopata na komára. Spinám topení na domacím serveru. Ráno vypnout, večer zapnout. Použil jsem Date Time Picker a i když zadavám čas, tak mi vrací i datum. To potom dělá problém při porovnávání s aktuálním časem. V příkladech doporučují raději používat metody z DateTime. Ale nevím jak porovnávat jen čas a ignorovat datum. (Nakonec jsem převedl časy do stringu ty pak porovnávám.)

Druhá věc co mne zarazila je MySetings. Není v nich proměnná typu DateTime, jen Date.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nic jiného na čas než DateTime nebo TimeSpan není. Neexistuje zvlášť datový typ pro datum a pro čas. Date je typ Visual Basicu, který je přesně mapovaný na DateTime. Není to žádná lopata na komára, jen je potřeba s tím umět pracovat a mít vždy na vědomí, že při porovnávání to obsahuje i datum.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Navíc se dá napsat Extension metoda pro DateTime, která bude porovnávat pouze čas bez datumu.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Proměnná typu DateTime má mimo jiné vlastnosti Hours, Minutes a Seconds. Co víc na porovnání potřebujete?

Naokap jsou lidi, kteří by to řešili porovnáváním stringů, což je prasárna.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý deň,

On nepotrebuje viac, potrebuje menej.Porovnáva mu to aj dátum,

a teda keď nastaví že to má začať 16.12.2010 8:00 a skončiť 16.12.2010 20:00 tak zajtra by mu to nezaplo a ani nevyplo.

Nějaké jméno: Na porovnávanie iba času porovnávajte TimeSpan s TimeSpan .Aktuálny čas získate napríklad:

DateTime.Now.TimeOfDay

Alebo môžete skúsiť vlastnú extension metódu pre porovnávanie ako napísal p. Linhart vyššie.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zas taková prasárna to není:

Po spuštění:
		DateTimeCasVypnuti.Value = My.Settings.CasVypnuti
		DateTimeCasZapnuti.Value = My.Settings.CasZapnuti
		CasVypnuti = Format(DateTimeCasVypnuti.Value, "HH:mm:ss")
		CasZapnuti = Format(DateTimeCasZapnuti.Value, "HH:mm:ss")

Timer1 - test co minutu
		Dim CasAktualni As String

		CasAktualni = Format(My.Computer.Clock.LocalTime(), "HH:mm:ss")
		If (CasAktualni > CasVypnuti) And (CasAktualni < CasZapnuti) Then
			VypniTopeni()
		Else
			ZapniTopeni()
		End If


Pár řádku kódu, nic složitého. Ještě se podivám metody popsané v příspěvku níže.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

To že je to pár řádků neznamená, že to není prasárna. Je to asi tak elegantní, jako kdybyste se levou nohou drbal za pravým uchem.

Padlo tady několik návrhů, jak to řešit - stačí tohle:

If (DateTime.Now.Hours = CasVypnuti.Hours And DateTime.Now.Minutes = CasVypnuti.Minutes) Then
   VypniTopeni()
End If
nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Aha, jak jednoduché a prosté...

Je ale nutné se vždy snažit použí metody z knihoven VB? Respektive se v helpu nepíše co použít a co ne. Občas jsem v knížkách narazil na doporučení některé postupy nepoužívat, protože jsou zastaralé a jsou zachovány kvůli zpětné kompatibilitě.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jistě, vždy je nejlepší používat už hotové věci z Frameworku, než vymýšlet pochybná vlastní řešení.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ano, knížky doporučují (a i my) nepoužívat staré věci a přežitky z VB6, např. funkce MsgBox, Mid, InStr atd. Jsou pomalejší a máme jejich ekvivalenty, které fungují nezávisle na jazyce (jak ve VB.NET, tak i v C#).

Ale v drtivé většině případů si své řešení nepište a použijte to, co .NET umí - jedna autoři .NETu na to mají napsané kupu testů, což by určitě nemáte, a druhak pokud nejste profík, těžko to napíšete líp, spíš v tom akorát naflákáte chyby.

Typický příklad - kontrola, jestli je v TextBoxu datum ve správném formátu. Tolik lidí si to radši napíše samo, použije IndexOf nebo Split na hledání teček, či regulární výrazy (kterými se to spolehlivě udělat nedá), a pak to mají napsané blbě.

Obecně programátor by měl být spíš líný, aby znovu nevynalézal kolo a znovu se stejnými chybami. Čím míň řádků kódu napíštete, tím míň v nich naflákáte chyb.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

MsgBox je taky na černé listině? V knize Visual Studio 2010 krok za krokem ho hojně použivají. A pak čemu má člověk věřit a podle čeho se má učit.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

MsgBox stejně jako většina věcí z VB6 se mapuje na MessageBox.Show. Pokud to používáte tak to moc nevadí, ale lepší je používat přímo to z .NET Frameworku.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback