C# 如何获取转换后的时区值?
我正在使用以下代码将日期时间值转换为印度标准时间:C# 如何获取转换后的时区值?,c#,asp.net,datetime,timezone,timezone-offset,C#,Asp.net,Datetime,Timezone,Timezone Offset,我正在使用以下代码将日期时间值转换为印度标准时间: public DateTime GetdatetimedetailsinIST(DateTime datetimeinfo, String timeoffsetvalue) { string offset= timeoffsetvalue; string timeZoneFormat = Convert.ToString("India Standard Time"); string strIndianTimezone =
public DateTime GetdatetimedetailsinIST(DateTime datetimeinfo, String timeoffsetvalue)
{
string offset= timeoffsetvalue;
string timeZoneFormat = Convert.ToString("India Standard Time");
string strIndianTimezone = timeZoneFormat;
TimeZoneInfo tzinfoIndian = TimeZoneInfo.FindSystemTimeZoneById(strIndianTimezone);
DateTime dtDateTime = datetimeinfo.AddMinutes(Convert.ToInt32(offset));//ToUniversalTime();
dtDateTime = TimeZoneInfo.ConvertTimeFromUtc(dtDateTime, tzinfoIndian);
return dtDateTime;
}
现在我正在调用GetdatetimedetailsinIST(2014年6月5日上午8:00:00,“240”)代码>
印度时间2014年6月5日下午5:30:00
现在,我想通过使用值5/6/2014 5:30:00 PM返回另一个场景的5/6/2014 8:00 AM
在上述功能中需要做哪些更改
请提供帮助。如何将字符串timeZoneToConvertTo参数添加到转换方法中
public static DateTime DateTimeConvert(DateTime nonConvertedDateTime, string timeoffsetvalue, string timeZoneToConvertTo)
{
TimeZoneInfo tzinfo = TimeZoneInfo.FindSystemTimeZoneById(timeZoneToConvertTo);
DateTime dtDateTime = nonConvertedDateTime.AddMinutes(Convert.ToInt32(timeoffsetvalue));
dtDateTime = TimeZoneInfo.ConvertTimeFromUtc(dtDateTime, tzinfo);
return dtDateTime;
}
Console.WriteLine(DateTimeConvert(new DateTime(2014, 5, 6, 8, 00, 00), "240", "India Standard Time").ToString());
Console.WriteLine(DateTimeConvert(new DateTime(2014, 5, 6, 8, 00, 00), "240", "Central Standard Time").ToString());
您仍然需要处理由于无法找到时区而导致的任何异常
我不明白为什么您希望使用偏移量而不是使用ToUniversal()扩展名,这是您的选择。很少需要或建议手动添加分钟数。此外,在方法周围还有很多不必要的字符串。请考虑下面的内容:
public static DateTime ConvertToIndiaTime(DateTime dateTime, int offsetMinutes)
{
// Create a DateTimeOffset from the input values.
// This assumes positive offset values are *WEST* of UTC,
// such as if it came from the getTimeZoneOffset function of
// JavaScript's Date object.
TimeSpan offset = TimeSpan.FromMinutes(-offsetMinutes);
DateTimeOffset dto = new DateTimeOffset(dateTime, offset);
// Convert the DateTimeOffset to the desired time zone
DateTimeOffset converted =
TimeZoneInfo.ConvertTimeBySystemTimeZoneId(dto, "Indian Standard Time");
// Return the DateTime portion, representing the local time in India.
return converted.DateTime;
}
你可以这样称呼它:
// get a DateTime object
DateTime dt = DateTime.ParseExact("5/6/2014 8:00:00 AM",
"M/d/yyyy h:mm:ss tt",
CultureInfo.InvariantCulture);
// get the offset as an integer
int offsetMinutes = 240;
// call the conversion method
DateTime indiaTime = ConvertToIndiaTime(dt, offsetMinutes);
您的方法似乎将两个独立的DateTime
操作组合为一个操作-因此,要反转操作并不容易。以下结构如何:
private static readonly TimeZoneInfo IstTimeZone =
TimeZoneInfo.FindSystemTimeZoneById("India Standard Time");
public static DateTime ConvertDateTimeUtcToIst(DateTime toConvert)
{
return TimeZoneInfo.ConvertTimeFromUtc(toConvert, IstTimeZone);
}
public static DateTime ConvertDateTimeIstToUtc(DateTime toConvert)
{
return TimeZoneInfo.ConvertTimeToUtc(toConvert, IstTimeZone);
}
用法:
var converted = ConvertDateTimeUtcToIst(DateTime.Parse("5/6/2014 8:00:00 AM"))
.AddMinutes(240);
var reverted = ConvertDateTimeIstToUtc(converted).AddMinutes(-240);
var converted = ConvertDateTimeUtcToIst(
DateTime.Parse("5/6/2014 8:00:00 AM"), 240);
var reverted = ConvertDateTimeIstToUtc(converted, -240);
或者,如果您确实需要使用一种方法:
public static DateTime ConvertDateTimeUtcToIst(
DateTime toConvert, int offset = 0)
{
return TimeZoneInfo.ConvertTimeFromUtc(toConvert, IstTimeZone)
.AddMinutes(offset);
}
public static DateTime ConvertDateTimeIstToUtc(
DateTime toConvert, int offset = 0)
{
return TimeZoneInfo.ConvertTimeToUtc(toConvert, IstTimeZone)
.AddMinutes(offset);
}
用法:
var converted = ConvertDateTimeUtcToIst(DateTime.Parse("5/6/2014 8:00:00 AM"))
.AddMinutes(240);
var reverted = ConvertDateTimeIstToUtc(converted).AddMinutes(-240);
var converted = ConvertDateTimeUtcToIst(
DateTime.Parse("5/6/2014 8:00:00 AM"), 240);
var reverted = ConvertDateTimeIstToUtc(converted, -240);
到目前为止,您尝试了什么?只需快速浏览一下,GetdatetimedetailsinIST(“5/6/2014 5:30:00 PM”,“-240”)
应该可以正常工作,没有任何代码更改。不,它不会工作:(我已经尝试过了。这行DateTime dtDateTime=nonConvertedDateTime.AddMinutes(Convert.ToInt32(timeoffsetvalue))怎么样我需要做-240吗?如果你想做一个以分钟为单位的偏移量,那就是我要做的。我不知道如何回答“240”对这个问题的意义,也不知道如何更具体地回答这个问题。