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”对这个问题的意义,也不知道如何更具体地回答这个问题。