Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to convert DateTime in Specific timezone?

Tags:

c#

datetime

utc

I find it hard to understand how UTC works.

I have to do the following but I'm still confused if I'd get the right result.

Objectives:

  1. Ensure all saved dates in Database are in UTC format
  2. Update DefaultTimezone is in Manila time
  3. Ensure all returned dates are in Manila Time

So the code is:

public ConvertDate(DateTime? dateTime) {     if (dateTime != null)     {         Value = (DateTime)dateTime;         TimeZone = GetFromConfig.DefaultTimeZone();      } }   public ConvertDate(DateTime? dateTime, int GMTTimeZone) {     if (dateTime != null)     {         Value = (DateTime)dateTime;         TimeZone = GMTTimeZone;     } }   public int TimeZone {     get { return m_TimeZone; }     set { m_TimeZone = value; } }   DateTime m_Value; public DateTime Value {     get { return m_Value; }     set      {          m_Value = value;         DateTime converted = m_Value.ToUniversalTime().ToLocalTime();     } } 

Sample usage:

DateTime SampleInputFromUser = new DateTime(2012, 1, 22); ConvertDate newConversion = new ConvertDate(SampleInputFromUser, 21); DateTime answer = newConversion.Value; 

Now I get confused for 'TimeZone'. I don't know how to use it to get the objectives.
Hope you understand my question and have the idea to get the objectives done.

Edit

According to @raveturned answer, I get this following code:

***Added in ConvertDate method

TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); ManilaTime = TimeZoneInfo.ConvertTime(dateTime.Value, TimeZoneInfo.Local, timeInfo).ToUniversalTime(); 

**New Property

DateTime _ManilaTime; public DateTime ManilaTime {     get { return _ManilaTime; }     set { _ManilaTime = value; } } 
like image 791
fiberOptics Avatar asked Mar 26 '12 08:03

fiberOptics


People also ask

How do you convert DateTime to UTC?

The ToUniversalTime method converts a DateTime value from local time to UTC. To convert the time in a non-local time zone to UTC, use the TimeZoneInfo. ConvertTimeToUtc(DateTime, TimeZoneInfo) method. To convert a time whose offset from UTC is known, use the ToUniversalTime method.

How do I convert one time zone to another in C #?

TimeZoneInfo timeZone = TimeZoneInfo. FindSystemTimeZoneById("Eastern Standard Time"); var time = timeZoneInfo. ConvertTime(gmTime, timeZone);


2 Answers

The .NET framework already has classes and methods available to convert DateTimes between different time zones. Have a look at the ConvertTime methods of the TimeZoneInfo class.

Edit: When you get the time to put into the database, assuming it was created with correct time zone information you can easily convert to UTC:

DateTime utcTime = inputDateTime.ToUniversalTime(); 

Get timeInfo as done in the question edit:

TimeZoneInfo timeInfo = TimeZoneInfo.FindSystemTimeZoneById(GetFromConfig.ManilaTimeZoneKey()); 

When you send the database time to user, convert it to the correct timezone using timeInfo.

DateTime userTime = TimeZoneInfo.ConvertTimeFromUtc(dbDateTime, timeInfo); 

Personally I'd try and keep this logic separate from the propery get/set methods.

like image 189
raveturned Avatar answered Sep 21 '22 21:09

raveturned


var date = System.TimeZoneInfo.ConvertTimeFromUtc(     DateTime.UtcNow,      TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time")); 
like image 35
Kevin Avatar answered Sep 21 '22 21:09

Kevin