![]() |
General Programming »
Date and Time »
Algorithms
Intermediate
License: The Code Project Open License (CPOL)
Rounding a DateTime object to a defined number of minutesBy Jason SobellA simple two line function to round a DateTime up, down, or to a nearest defined number of minutes. |
C# (C#1.0, C#2.0, C#3.0), Dev
|
|
Advanced Search Add to IE Search |
|
|
|
||||||||||||||||
Rounding a DateTime up (or down) to the nearest number of minutes seems a simple requirement, but is surprisingly unintuitive due to the relationships and different properties of DateTime and TimeSpan classes.
I've come across some pretty dreadful examples on the web, so thought I'd post a much simpler (and faster) one.
This function accepts the number of minutes to be rounded to.
public enum eRoundingDirection { up, down, nearest }
public DateTime RoundDateTime(DateTime dt, int minutes, eRoundingDirection direction)
{
TimeSpan t;
switch (direction)
{
case eRoundingDirection.up:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes, 0)); break;
case eRoundingDirection.down:
t = (dt.Subtract(DateTime.MinValue)); break;
default:
t = (dt.Subtract(DateTime.MinValue)).Add(new TimeSpan(0, minutes / 2, 0)); break;
}
return DateTime.MinValue.Add(new TimeSpan(0,
(((int)t.TotalMinutes) / minutes) * minutes, 0));
}
Why use "default:" instead of "nearest"? Simply because it saves defining a default value for the TimeSpan.
Integer math helps keep this function speedy, and avoids those tricky rounding errors in the milliseconds.
| You must Sign In to use this message board. | |||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||
General
News
Question
Answer
Joke
Rant
Admin
Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+PgUp/PgDown to switch pages.
|
PermaLink |
Privacy |
Terms of Use
Last Updated: 23 Mar 2008 Editor: Smitha Vijayan |
Copyright 2008 by Jason Sobell Everything else Copyright © CodeProject, 1999-2010 Web20 | Advertise on the Code Project |