Click here to Skip to main content
Licence CPOL
First Posted 23 Mar 2008
Views 21,146
Bookmarked 22 times

Rounding a DateTime object to a defined number of minutes

By | 23 Mar 2008 | Article
A simple two line function to round a DateTime up, down, or to a nearest defined number of minutes.

Introduction

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.

Using the code

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));
}

Points of interest

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.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

About the Author

Jason Sobell

CEO
QuestMetrics
Australia Australia

Member



Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
GeneralSo so PinmvpLuc Pattyn9:30 6 Mar '10  
GeneralExcellent code! PinmemberKebrite22:17 6 Feb '10  
GeneralRe: Excellent code! PinmemberJason Sobell1:19 7 Feb '10  
GeneralVery Interesting Pinmembermerlin9814:28 24 Mar '08  
Very interesting solution. Thanks for sharing
 


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Rhabot - World of Warcraft Bot
Uber RPGE - Free Private World of Warcraft Server
Make long URLs short with NeatURL.net
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web02 | 2.5.120529.1 | Last Updated 23 Mar 2008
Article Copyright 2008 by Jason Sobell
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid