在时区之间转换时间,无法完成转换



我正在尝试在时区之间转换时间

public QueryResult<RadAcct> Query(DateTime dateFrom, DateTime dateTo, DbConnection dbConection)
{
   TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
   //date from :2/20/2017 10:28:27 AM
   DateTime from = TimeZoneInfo.ConvertTimeToUtc(dateFrom, tst); 
   // error here, date to : 2/21/2017 4:56:31 Am
   DateTime to = TimeZoneInfo.ConvertTimeToUtc(dateTo, tst); 
}

从不同的服务和价值开始的dateto和DateTo是2/20/2017 10:28:27 AM,2/21/2017 4:56:31 AM

我有例外:

由于提供的DateTime未正确设置固定属性,因此无法完成转换。例如,当属性属性为dateTimeKind.local时,源时区必须是timezoneinfo.local。

使用datetime.specifykind函数将其设置为未指定的

TimeZoneInfo tst = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
DateTime from = TimeZoneInfo.ConvertTimeToUtc(dateFrom, tst); //date from :2/20/2017 10:28:27 AM
DateTime dateToUnspecified = DateTime.SpecifyKind(dateTo, DateTimeKind.Unspecified);
DateTime to = TimeZoneInfo.ConvertTimeToUtc(dateToUnspecified, tst); // date to : 2/21/2017 4:56:31 Am

您已经从时区指定了。但是我找不到时区。您可以使用以下代码在时区之间转换时间。

        DateTime dateFrom = Convert.ToDateTime("2/21/2017 04:22:27 PM");
        TimeZoneInfo fromTimeZone = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
        DateTime from = TimeZoneInfo.ConvertTimeToUtc(dateFrom, fromTimeZone);
        TimeZoneInfo toTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
        DateTime dateTo = TimeZoneInfo.ConvertTimeFromUtc(from, toTimeZone);

上面的代码是您的代码中的修改。但是您可以使用更简单的代码来执行此操作:

        DateTime dateFrom = Convert.ToDateTime("2/21/2017 04:22:27 PM");
        TimeZoneInfo fromTimeZone = TimeZoneInfo.FindSystemTimeZoneById("AUS Eastern Standard Time");
        TimeZoneInfo toTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time");
        DateTime dateTo = TimeZoneInfo.ConvertTime(dateFrom, fromTimeZone, toTimeZone);

我想您只想两次掩盖UTC。例外的原因可能是,DateTo的类属性设置为本地,并且该代码正在运行的系统的本地时区不是" Aus Aus Eastern Standard Time"。如果传递给转换为tocttimetoutc方法的日期是本地的,则该方法将期望SUCCETIMEZONE参数与代码正在运行的系统的本地时区匹配。

您可以使用以下代码将DateTo的属性设置为未指定的属性。通过这种情况,您不会例外:

DateTime.SpecifyKind(dateTo, DateTimeKind.Unspecified);

相关内容

  • 没有找到相关文章

最新更新