myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grundlagen von C# » DateTime Verrechnen und Zeitspanne auf Tage aufrunden
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

DateTime Verrechnen und Zeitspanne auf Tage aufrunden

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
deluxe13
myCSharp.de-Mitglied

Dabei seit: 21.09.2018
Beiträge: 32


deluxe13 ist offline

DateTime Verrechnen und Zeitspanne auf Tage aufrunden

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo ihr lieben, ich möchte eine Differenz zwischen zwei zeiten haben, was soweit kein problem ist

C#-Code:
            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?

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von deluxe13 am 17.06.2019 11:40.

Neuer Beitrag 17.06.2019 11:39 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.600
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo deluxe13,

schau dir  TimeSpan.TotalMinutes dazu an. Den Rest schaffst du dann schon ;-)

mfG Gü
Neuer Beitrag 17.06.2019 11:46 Beiträge des Benutzers | zu Buddylist hinzufügen
deluxe13
myCSharp.de-Mitglied

Dabei seit: 21.09.2018
Beiträge: 32

Themenstarter Thema begonnen von deluxe13

deluxe13 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Mit den Minuten hab ich ja erstmal wenig zu tun, ich möchte auf Tage aufrunden.

C#-Code:
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 :D

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


mycsharp.de  Moderationshinweis von gfoidl (17.06.2019 12:05):

Bitte keine Fullquotes. Steht ja eh darüber ;-)
 

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von deluxe13 am 17.06.2019 11:57.

Neuer Beitrag 17.06.2019 11:50 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.600
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Hallo deluxe13,

willst du so etwas?

C#-Code:
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ü
Neuer Beitrag 17.06.2019 12:01 Beiträge des Benutzers | zu Buddylist hinzufügen
deluxe13
myCSharp.de-Mitglied

Dabei seit: 21.09.2018
Beiträge: 32

Themenstarter Thema begonnen von deluxe13

deluxe13 ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 :)

Dieser Beitrag wurde 3 mal editiert, zum letzten Mal von deluxe13 am 17.06.2019 12:25.

Neuer Beitrag 17.06.2019 12:07 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
MrSparkle MrSparkle ist männlich
myCSharp.de-Team

avatar-2159.gif


Dabei seit: 16.05.2006
Beiträge: 5.210
Herkunft: Leipzig


MrSparkle ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Schau dir doch mal die Dokumentation zu  TimeSpan.TotalDays und probier den Code von gfoidl aus.

Zitat:
The TotalDays property represents whole and fractional days, whereas the Days property represents whole days.
Neuer Beitrag 17.06.2019 14:39 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 4 Monate.
Der letzte Beitrag ist älter als 4 Monate.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 11.11.2019 21:52