Wątek przeniesiony 2015-09-24 14:17 z C# i .NET przez ŁF.

Jak zrobić odejmowanie godzin w visual .net

0

Witam
Załóżmy że mam tabelę datagridview, w jedne kolumnie wprowadzam godzinę załóżmy że ręcznie może być z ":" czyli 14:00 lub bez 14 00
zaś w drugiej kolumnie wprowadzam aktualną godzinę powiedzmy 16:23 i chcę aby w trzeciej kolumnie pokazała się różnica pomiędzy godzinami. Jak to zrobić ? podobno używając ":" trzeba zastosować jakieś wartości convertToTime czy coś takiego a jak bym nie używał : tylko zwykła spację to można to zrobić na liczba całkowitych ale nie bardzo wiem jak

0

Ale jak chcesz odjąć godziny to nie wystarczy zrobić jakąś prostą metodę która to 'ręcznie' odejmie ? Możesz się bawić w parsowanie tego ale czy to ma sens ?

0
Astrocyt napisał(a):

Ale jak chcesz odjąć godziny to nie wystarczy zrobić jakąś prostą metodę która to 'ręcznie' odejmie ? Możesz się bawić w parsowanie tego ale czy to ma sens ?

Do parsowania i operowania na czasie są gotowe klasy i metody. Czy jest sens bawić się w wynajdowanie koła od nowa?

0

Popróbuj w ten sposób

TimeSpan span = dataGridView1[3,0].Value.Subtract ( dataGridView1[5,0].Value );
0

Z tego co piszesz przypuszczam, że kolumny nie są tylu DateTime, a zastosowanie wyrażenie może być trudne.
Tak jak piszą przedmówcy struktura DateTime posiada konstruktor z parametrami określającymi godzinę i minutę. Operacja matematyczna na dwóch strukturach DateTime zwraca typ TimeSpan zawierający różnicę.

 
private void button1_Click(object sender, EventArgs e)
{
    TimeSpan result = (GetDateTime("14:00") - GetDateTime("16:32"));
    MessageBox.Show(string.Format("{0}:{1}", result.Hours, result.Minutes));            
}

public DateTime GetDateTime(string time)
{
    string sHour = time.Substring(0, 2);
    string sMinute = time.Substring(3, 2);

    var dNow = DateTime.Now;
    return new DateTime(dNow.Year, dNow.Month, dNow.Day, int.Parse(sHour), int.Parse(sMinute), 0);             
}
5

@Bert1223, ale po co pisać własną metodę do parsowania dat?!

Nie potrzeba wynajdowania koła na nowo, wystarczy:

DateTime dt = DateTime.Parse("14:00");

Nawet jeśli potrzebne jest jakieś cudowanie, bo np. mamy separator z kosmsu, to też można użyć wbudowanej funkcji:

DateTime dt = DateTime.ParseExact("14|00", "HH|mm", CultureInfo.InvariantCulture);
0
somekind napisał(a):

@Bert1223, ale po co pisać własną metodę do parsowania dat?!

Nie potrzeba wynajdowania koła na nowo, wystarczy:

DateTime dt = DateTime.Parse("14:00");

Nawet jeśli potrzebne jest jakieś cudowanie, bo np. mamy separator z kosmsu, to też można użyć wbudowanej funkcji:

DateTime dt = DateTime.ParseExact("14|00", "HH|mm", CultureInfo.InvariantCulture);

a jak od tego pod urzyciem buttonu odjąć godzinę 14:35

0
		var now = DateTime.Now;
		var dt1 = new DateTime(now.Year, now.Month, now.Day, 14, 00, 00);
		var dt2 = new DateTime(now.Year, now.Month, now.Day, 16, 23, 00);

		TimeSpan difference = dt2-dt1;

		Console.WriteLine(difference);
0

Nadal nie wiem jak to zrobić może mi ktoś dodać odpowiednie funkcję między pola poniżej :

Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         
    End Sub

    Private Sub TextBox1_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox1.TextChanged

    End Sub

    Private Sub TextBox2_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TextBox2.TextChanged

    End Sub

    Private Sub Label1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Label1.Click

    End Sub
End Class 

textbox 1 aktualna godzina
textbox2 godzina np. 20min później niż aktualna
Button1 polecenia równania
Label1 wynik równania

Bardzo prosze bo niby rozumiem wszystko co piszczcie ale nie potrafię tego zaimpelementować

0

proszę o pomoc temat został przeniesiony wciąż aktualny

0

zrobiłem taki kod i w końcu działa !
textbox1.text = godzina np. 06:00
textbox2.text = godzina np. 7:12
różnica w textbox3 pokazuje poprawnie ale razem z sekundami

 Dim d1 As DateTime
        Dim d2 As DateTime
        Dim ts As TimeSpan
        'Time format is 10:35:23. So in textbox you must type like this...
        d1 = DateTime.Parse("1/1/2012 " + Me.TextBox1.Text.Trim)
        d2 = DateTime.Parse("1/1/2012 " + Me.TextBox2.Text.Trim)
        ts = d1 - d2
        TextBox3.Text = (ts.ToString) 

jak prze konwertować wartość textbox3.text aby wynik końcowy był bez sekund ? da się tak ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1