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
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 ?
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?
Popróbuj w ten sposób
TimeSpan span = dataGridView1[3,0].Value.Subtract ( dataGridView1[5,0].Value );
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);
}
@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);
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
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);
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ć
proszę o pomoc temat został przeniesiony wciąż aktualny
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 ?