在时区之间转换时间,转换无法完成
Converting Times Between Time Zones, The conversion could not be completed
我正在尝试在时区之间转换时间
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);
}
dateFrom 和 dateTo 来自不同的服务,值为 2/20/2017 10:28:27 AM,2/21/2017 4:56:31 Am
我遇到异常:
The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly. For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local.\r\nParameter name: sourceTimeZone
使用DateTime.SpecifyKind函数将Kind设置为Unspecified,
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
您指定了起始时区。但我找不到 To timezone。您可以使用以下代码在时区之间转换时间。
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的Kind属性设置为Local,code为运行的系统本地时区不是"AUS Eastern Standard Time"。如果传递给 ConvertTimeToUtc 方法的日期类型是 Local,则该方法将期望 sourceTimeZone 参数与代码为 运行.
的系统的本地时区相匹配
您可以使用以下代码将 dateTo 的 Kind 属性 设置为 UnSpecified。这样你就不会得到例外:
DateTime.SpecifyKind(dateTo, DateTimeKind.Unspecified);
我正在尝试在时区之间转换时间
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);
}
dateFrom 和 dateTo 来自不同的服务,值为 2/20/2017 10:28:27 AM,2/21/2017 4:56:31 Am
我遇到异常:
The conversion could not be completed because the supplied DateTime did not have the Kind property set correctly. For example, when the Kind property is DateTimeKind.Local, the source time zone must be TimeZoneInfo.Local.\r\nParameter name: sourceTimeZone
使用DateTime.SpecifyKind函数将Kind设置为Unspecified,
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
您指定了起始时区。但我找不到 To timezone。您可以使用以下代码在时区之间转换时间。
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的Kind属性设置为Local,code为运行的系统本地时区不是"AUS Eastern Standard Time"。如果传递给 ConvertTimeToUtc 方法的日期类型是 Local,则该方法将期望 sourceTimeZone 参数与代码为 运行.
的系统的本地时区相匹配您可以使用以下代码将 dateTo 的 Kind 属性 设置为 UnSpecified。这样你就不会得到例外:
DateTime.SpecifyKind(dateTo, DateTimeKind.Unspecified);