Hallo ihr lieben, ich möchte eine Differenz zwischen zwei zeiten haben, was soweit kein problem ist
string dd = dateEdit1.DateTime.ToString("dd.MM.yyyy") + " " + txtVerilisSaat.Text + ":" + txtVerilisDakika.Text;
DateTime dt1 = DateTime.ParseExact(dd, "dd.MM.yyyy HH:mm", System.Globalization.CultureInfo.InvariantCulture);
string d2 = dateEdit2.DateTime.ToString("dd.MM.yyyy") + " " + txtVerilisSaat.Text + ":" + txtVerilisDakika.Text;
DateTime dt2 = DateTime.ParseExact(d2, "dd.MM.yyyy HH:mm", System.Globalization.CultureInfo.InstalledUICulture);
TimeSpan diff = dt2 - dt1;
nun möchte ich aber die Zeitspann " diff " aufrunden. Also wenn zb. 1 Tag und 1 Stunde das ergebniss ist möchte ich es auf 2 Tage aufrunden. Also Sobald es eine minute mehr als ein Tag ist ( die differenz) möchte ich das dieser es auf einen vollen Tag Aufrunded.
Hat jemand vielleicht eine idee?
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Mit den Minuten hab ich ja erstmal wenig zu tun, ich möchte auf Tage aufrunden.
lbltotaldays.Text = ((int)Math.Round(totaldays.TotalDays, MidpointRounding.AwayFromZero)).ToString();
das wäre ja theoretisch möglich.. Nur rundet es dann halt ab .05 aufwärts auf. Ich möchte aber sobald eine Sekunde drüber ist auf einen Kompleten tag aufrunden 😄
gibts da noch was anderes außer midpointRounding, glaube etwas was immer aufrunden wäre dann schon meine lösung.
Wenn normale INT wäre würde man es ja mit Math.Ceiling-Methode recht einfach lösen können aber mit DateTime ... mhh
Bitte keine Fullquotes. Steht ja eh darüber 😉
Hallo deluxe13,
willst du so etwas?
using System;
using System.Collections.Generic;
using NUnit.Framework;
namespace Tests
{
[TestFixture]
public class Tests
{
[Test, TestCaseSource(nameof(Correct_rounding_TestCases))]
public TimeSpan Correct_rounding(TimeSpan input)
{
return input.RoundToWholeDays();
}
private static IEnumerable<TestCaseData> Correct_rounding_TestCases()
{
yield return new TestCaseData(new TimeSpan(1, 0, 0, 0)).Returns(new TimeSpan(1, 0, 0, 0));
yield return new TestCaseData(new TimeSpan(1, 0, 0, 1)).Returns(new TimeSpan(2, 0, 0, 0));
yield return new TestCaseData(new TimeSpan(1, 0, 1, 0)).Returns(new TimeSpan(2, 0, 0, 0));
yield return new TestCaseData(new TimeSpan(1, 1, 0, 0)).Returns(new TimeSpan(2, 0, 0, 0));
}
}
public static class Extensions
{
public static TimeSpan RoundToWholeDays(this TimeSpan timeSpan)
{
int days = timeSpan.Days;
return timeSpan.TotalDays == days
? timeSpan
: new TimeSpan(days + 1, 0, 0, 0);
}
}
}
Hier hab TotalDays
verwendet.
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"
Das Soll wirklich aufrunden ?
Ich habe Datetime 1 und 2
zb.
01.01.2010 15:00
02.01.2010 15:10
soll das Erbeniss " 2 " liefern.
01.01.2001 15:00
01.01.2001 16:00
Das Ergebniss "1" .
Mit timespan.Days holt er ja nur die Tage.. Wie soll hier das Aufrunden möglich sein.
blicke gerade garnicht mehr durch, gibts diesen code nicht vereinfacht für Amateure 😃
-- Habs jetzt mal anders gelöst. Ich vergleiche die Stunden und Minuten und wenn größer oder kleiner packe ich einfach eine eins drauf 😃
Schau dir doch mal die Dokumentation zu TimeSpan.TotalDays und probier den Code von gfoidl aus.
The TotalDays property represents whole and fractional days, whereas the Days property represents whole days.
Weeks of programming can save you hours of planning