如何返回转换后的时区值

本文关键字:时区 转换 何返回 返回 | 更新日期: 2023-09-27 18:02:10

我正在使用下面的代码将日期时间值转换为印度标准时间:

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(5/6/2014 8:00:00 AM,"240");

它会回到印度时间5/6/2014下午5:30:00。

现在我想通过使用值5/6/2014 5:30:00 PM来获得另一个场景的5/6/2014 8:00: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());

您仍然需要处理由于无法找到时区而导致的任何异常。

我不明白为什么你想要一个偏移量而不是使用tuniversal()扩展,但是,这是你的选择。

很少需要或推荐手动添加分钟。另外,在你的方法周围有很多不必要的字符串。请考虑以下内容:

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);

或者如果你绝对需要在一个方法中使用它:

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"), 240);
var reverted = ConvertDateTimeIstToUtc(converted, -240);