Rozdil hodin   zodpovězená otázka

VB6/VBA

zdravim vas, nemuzu porad prijit na to, jakym zpusobem od sebe odecist dve hodnoty casu - napr. 14:00:00 a 12:55:00 - aby mi to vratilo vysledek 1:05:00 a zaroven bych mohl toto cislo vynasobit napr. 25. Dekuji za odpoved

nahlásit spamnahlásit spam 0 odpovědětodpovědět
Dim t0 As Date = Date.Parse("9.1.2008 12:55:00")
Dim t1 As Date = Date.Parse("9.1.2008 14:00:00")
Dim t As TimeSpan = t0 - t1

V t naleznete zbývající počet dní, hodin, minut, vteřin, milisekund a tiků. S těmito hodnotami pak můžete provádět další matematické operace.

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

Až na to, že tohle nepůjde ve VB6.

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

Aha, sem si nevšimnul tématu "Visual Basic 6 a jiné verze"...

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

Jak je to teda prosím ve VB.NET?

Když použiji:

 For i = 0 To V

            Dim t0 As Date = Date.Parse(ListBox11.Items.Item(i))
            Dim t1 As Date = Date.Parse(System.DateTime.Now)
            Dim t As TimeSpan = t0 - t1
            MsgBox(t0)
            MsgBox(t1)
            MsgBox(t)

 Next

Hodí mi to, že "t" nelze převést na string. (Argument 'Prompt' cannot be converted to type 'String'.)

Potřebuju, aby mi to vzalo čas a datum z listboxu1, srovnalo s aktuálním časem datem a vyhodilo rozdíl.

Děkuji...

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

Čas ve VB6 lze odečítat pomocí TimeSerial

Příklad s komentářem:

  ' syntaxe TimeSerial(hodiny, minuty, sekundy) - parametry jsou typu Integer
  ' lze použít i výrazy, tedy i odečíst uvedené časy 14:00:00 a 12:55:00 
  Dim cas
  cas = TimeSerial(14 - 12, -55, 0)
  MsgBox cas   ' vrátí žádané 1:05:00

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

Diky moc, moc mi to pomohlo!

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

muzu jeste mit jednu podotazku - jak pak nasledne s vysledkem pracovat? potreboval bych v mem programu nasobit vysledek treba cislem 25..

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

Násobení je také možné, ale je nutné ošetřit hodnotu > 24 hodin. Nevím, zda není lepší způsob, zkuste třeba

  Private Sub Form_Load()
    Dim cas, den  As Integer
    Dim i As Integer
    cas = TimeSerial(14 - 12, -55, 0)
    den = 0
    MsgBox "Časový rozdíl: " & cas
    For i = 20 To 60 Step 10
      If (cas * i) >= 1 Then den = Int(cas * i)
      MsgBox "Počet dnů: " & den & ", čas: " & _
         FormatDateTime(CDate(cas * i), vbLongTime), vbInformation, _
         "Čas: " & cas & " x " & i
   Next
   End
  End Sub

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

Moc dekuju, preji hezky vikend

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

Jak je to teda prosím ve VB.NET?

Když použiji:

 For i = 0 To V

            Dim t0 As Date = Date.Parse(ListBox11.Items.Item(i))
            Dim t1 As Date = Date.Parse(System.DateTime.Now)
            Dim t As TimeSpan = t0 - t1
            MsgBox(t0)
            MsgBox(t1)
            MsgBox(t)

 Next

Hodí mi to, že "t" nelze převést na string. (Argument 'Prompt' cannot be converted to type 'String'.)

Potřebuju, aby mi to vzalo čas a datum z listboxu1, srovnalo s aktuálním časem datem a vyhodilo rozdíl.

Děkuji...

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

A co v tom listboxu máte, že to hodí tuhle chybu?

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

ListBox11.Items.Add(IO.Directory.GetLastAccessTime(spolP & ComboBox1.Text & "\NTUSER.DAT"))

Tady jsem zkoušel zjistit poslední modifikaci souboru. Vyodí mi to např:

1.4.2008 13:06:53

5.3.2008 13:49:26

15.4.2008 12:33:05

15.4.2008 15:09:03

4.4.2008 14:10:10

15.4.2008 15:47:17

15.4.2008 14:00:25

25.3.2008 12:56:07

15.4.2008 6:54:51

MsgBox(t0) a t1 mi vyhodí to co čekam, ale MsgBox(t) mi už hodí zmiňovanou chybu.

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

Použijte t.toString

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

To už jsem zkoušel. Buď špatně, nebo to také nefunguje.

i jsem zkoušel

Convert.ToString(t)

a také mi to hází, že T nelze převést na string.

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

MsgBox(t.toString) musí jít!

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

Tak jsem to používal špatně. Díky už to jede :)

Ještě se zeptam čeho jsem tímto příkazem docílil?

Hlavní pro mě je, že to funguje, ale nějak tomu nerozumím.

Moc díky za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
Public Class Form1
  Private Sub Form1_Load(ByVal sender As System.Object, _
      ByVal e As System.EventArgs) Handles MyBase.Load
    Dim t0 As Date = Date.Parse("1.4.2008 13:06:53")
    Dim t1 As Date = Date.Parse("16.4.2008 14:45:50")
    Dim t As TimeSpan = t1 - t0
    MsgBox(t.ToString) ' vrátí: 15.01:38:57
    MsgBox("Dny: " & t.Days & vbCrLf & _
            "Hodiny: " & t.Hours & vbCrLf & _
            "Minuty: " & t.Minutes & vbCrLf & _
            "Sekundy: " & t.Seconds)
    ' vrátí:
    ' Dny: 15
    ' Hodiny: 1
    ' Minuty: 38
    ' Sekundy: 57
  End Sub
End Class

nahlásit spamnahlásit spam 0 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