QUESTION: What is the easiest way to find the difference between two dates?
DateTime userLoginTime = (DateTime)roteTimeout.LastLoginTime;
TimeSpan span = DateTime.Now.Subtract(userLoginTime);
if (span.Seconds > userTimeout.TimeoutPeriod)
{
}
QUESTION: What is the easiest way to find the difference between two dates?
DateTime userLoginTime = (DateTime)roteTimeout.LastLoginTime;
TimeSpan span = DateTime.Now.Subtract(userLoginTime);
if (span.Seconds > userTimeout.TimeoutPeriod)
{
}
I’m always searching the internet for DateTime formats, so I’ve placed them in my Blog so I’ll also know where I can find them
Below lists the valid format specifiers supported by the Format
method on theDateTime
type (see System.IFormattable
).
DateTime Format Specifiers
Specifier | String Result |
d | MM/dd/yyyy |
D | dddd, MMMM dd, yyyy |
f | dddd, MMMM dd, yyyy HH:mm |
F | dddd, MMMM dd, yyyy HH:mm:ss |
g | MM/dd/yyyy HH:mm |
G | MM/dd/yyyy HH:mm:ss |
m, M | MMMM dd |
r, R | Ddd, dd MMM yyyy HH’:’mm’:’ss ‘GMT’ |
s | yyyy-MM-dd HH:mm:ss |
S | yyyy-MM-dd HH:mm:ss GMT |
t | HH:mm |
T | HH:mm:ss |
u | yyyy-MM-dd HH:mm:ss |
U | dddd, MMMM dd, yyyy HH:mm:ss |
y, Y | MMMM, yyyy |
Here’s an example that uses these custom format specifiers on a DateTime
value:
using System;class TestDateTimeFormats {static void Main( ) {DateTime dt = new DateTime(2000, 10, 11, 15, 32, 14);// Prints "2000-10-11T15:32:14"Console.WriteLine(dt.ToString( ));// Prints "Wednesday, October 11, 2000"Console.WriteLine("{0}", dt);// Prints "10/11/2000"Console.WriteLine("{0:d}", dt);// Prints "Wednesday, October 11, 2000"Console.WriteLine("{0:D}", dt);// Prints "Wednesday, October 11, 2000 3:32 PM"Console.WriteLine("{0:f}", dt);// Prints "Wednesday, October 11, 2000 3:32:14 PM"Console.WriteLine("{0:F}", dt);// Prints "10/11/2000 3:32 PM"Console.WriteLine("{0:g}", dt);// Prints "10/11/2000 3:32:14 PM"Console.WriteLine("{0:G}", dt);// Prints "October 11"Console.WriteLine("{0:m}", dt);// Prints "October 11"Console.WriteLine("{0:M}", dt);// Prints "Wed, 11 Oct 2000 22:32:14 GMT"Console.WriteLine("{0:r}", dt);// Prints "Wed, 11 Oct 2000 22:32:14 GMT"Console.WriteLine("{0:R}", dt);// Prints "3:32 PM"Console.WriteLine("{0:t}", dt);// Prints "3:32:14 PM"Console.WriteLine("{0:T}", dt);// Prints "2000-10-11 22:32:14Z"Console.WriteLine("{0:u}", dt);// Prints "Wednesday, October 11, 2000 10:32:14 PM"Console.WriteLine("{0:U}", dt);// Prints "October, 2000"Console.WriteLine("{0:y}", dt);// Prints "October, 2000"Console.WriteLine("{0:Y}", dt);// Prints "Wednesday the 11 day of October in the year 2000"Console.WriteLine("{0:dddd 'the' d 'day of' MMMM 'in the year' yyyy}", dt);}}
There are some things to consider when using these default formatters in an international environment.
Console.WriteLine("{0:t}", dt); // Prints "3:32:14 PM"Console.WriteLine("{0:T}", dt); // Prints "2000-10-11 22:32:14Z"
The difference between {0:t}
and {0:T}
has to be taken into account. This difference is due to the fact that .NET has two date time representations—Long ( T )
and Short ( t )
—while Windows uses only the Long
notation.
So, if a user changes the Regional Settings in Windows only the Long
notation will follow this change in .NET. This means that the programmer has to perform his own formatting—and not use the default formatters—if he wants to follow the users settings—not something a programmer should expect.
It’s worth check out SteveX Blog on String Formats
Working with non-nullable types in C# can be a bit of a pain. For instance when I have a date as a string and need to parse it into a DateTime what should the value be if the parse fails? I can’t use null because DateTime is not a nullable type.
This is exactly the dilema I encountered today. No worries, I’ll use DateTime.MinValue that way it is constant and I don’t have to worry about being consistent if I had chosen an arbitrary value of my own.
Well as it turns out I did have some worries. Sql Server 2000’s minimum DateTime value is not the same, in fact it is quite different. This kept causing errors.
For your reference here are some values you should take note of.
DateTime myDate = DateTime.MinValue; //=> 1/1/0001
SqlDateTime mySqlDate = SqlDateTime.MinValue; //=> 1/1/1753
//also note that SQL Server’s smalldatetime min value is 1/1/1900
If you need to use the smalldatetime you will need to create your own property to do this
So my problem was easily averted, after a quick Google search. I just had to use SqlDateTime.MinValue instead of DateTime.MinValue.