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
Jak zrobić odejmowanie godzin w visual .net
Wątek przeniesiony 2015-09-24 14:17 z C# i .NET przez ŁF.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
- Rejestracja: dni
- Ostatnio: dni
- Postów: 17
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 ?
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
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?
- Rejestracja: dni
- Ostatnio: dni
- Postów: 419
Popróbuj w ten sposób
TimeSpan span = dataGridView1[3,0].Value.Subtract ( dataGridView1[5,0].Value );
- Rejestracja: dni
- Ostatnio: dni
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);
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Wrocław
@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);
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
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
- Rejestracja: dni
- Ostatnio: dni
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);
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
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ć
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
proszę o pomoc temat został przeniesiony wciąż aktualny
- Rejestracja: dni
- Ostatnio: dni
- Postów: 62
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 ?
- Rejestracja: dni
- Ostatnio: dni