Windows Azure Cloud Storage ermöglicht es Ihnen bereits ab 0,10€ pro GB/Monat die Vorteile der Cloud zu nutzen.
Willkommen bei dotnet-snippets.de! Snippet hinzufügen Login Registrieren
Snippets in der Datenbank: 1549 | Anzahl registrierter User: 1833 | Besucher online: 630
Hauptmenü
Home
Top Ten
Zufälliger Snippet
FAQs
.NET Community
dotnet-forum.de
dotnet-kicks.de
Social

RSS Feeds
Rss Alle Snippets
Rss C#
Rss VB.NET
Rss C++
Rss ASP.NET
Partner
Member of Microsoft Community Leader/Insider Program (CLIP)

DateTime Runden


Autor: Boas Enkler
Sprache: C#
Bewertung: 7,4
(1 Bewertung)
Anzahl der Aufrufe: 4613
  
Kick it on dotnet-kicks.de  

Beschreibung:

Rundet eine Datum-Zeit angaben auf ein angegebenes Intervall (15 Minuten,Halbe Stunde, usw...)

Abgelegt unter: DateTime, runden, Viertelstunde, 15, 30, 45.



C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
  /// <summary>
        /// The Rounding types
        /// </summary>
        public enum RoundType
        {
            /// <summary>
            /// Complete Hour
            /// </summary>
            Hour = 60,

            /// <summary>
            /// Half an Hour
            /// </summary>
            HalfHour = 30,

            /// <summary>
            /// 15 Miniutes
            /// </summary>
            QuaterHour = 15,

        }




        /// <summary>
        /// Roundes the given DateTime to the given Minutes Pattern (15,30,60...)
        /// </summary>
        /// <param name="source">DateTime which should be rounded</param>
        /// <param name="type">The Roundtype</param>
        public static System.DateTime Round(this System.DateTime source, RoundType type)
        {

            System.DateTime result = source;

            int minutes = Convert.ToInt32(type);
            int modulo;

            Math.DivRem(source.Minute, minutes, out modulo);


            if (modulo > 0)
            {
                if (modulo >= (minutes / 2))
                {
                    //Näher am oberen ende => nach utnen laufen
                    result = source.AddMinutes(minutes - modulo);
                }
                else
                {
                    //Wir sind näher am unteren ende => bis zur unteren basis laufen
                    result = source.AddMinutes(modulo * -1);

                }


                result = result.AddSeconds(source.Second * -1);
            }

            return result;
        }


Sie haben Fragen zu diesem Snippet oder brauchen Hilfe bei der .NET Entwicklung?
Freundliche und kompetente Entwickler helfen Ihnen gern weiter im Forum für .NET Entwicklung.



Kommentare:
(Zum Schreiben von Kommentaren bitte anmelden.)

David Zeindler schrieb am:  14.09.2011 10:39:25

Habe doch noch einen Fehler gefunden. Wenn du QuaterHour als 15min wählst, dann wird es "9:52" zu "10:00" aufrunden. Egentlich sollte "52" abgerundet werden. Der Fehler passiert bei ... if (modulo >= (minutes / 2)) ... minutes ist Integer und wird durch zwei geteilt. ergibt eigentlich 7.5, da es aber Integer ist wird es abgeschnitten ergibt 7, so wird die Bedingung verfälscht.
Lösung: minutes zu "decimal minutes" umschreiben und für die Math.DivRem Methode zu Int Convertieren. Dann funktioniert es reibungslos ohne Fehler :-)

Gruss David


schlecht sehr gut
1 2 3 4 5 6 7 8 9 10
Nur angemeldete User können Snippets bewerten.