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:
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; } }
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.
TimeZoneInfo timeZone = TimeZoneInfo. FindSystemTimeZoneById("Eastern Standard Time"); var time = timeZoneInfo. ConvertTime(gmTime, timeZone);
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.
var date = System.TimeZoneInfo.ConvertTimeFromUtc( DateTime.UtcNow, TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"));
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With