我正在尝试在时区之间转换时间
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
我有例外:
无法完成转换,因为提供的DateTime没有正确设置Kind属性。例如,当Kind属性为DateTimeKind.Local时,源时区必须为TimeZoneInfo.Local。\ r \ nParameter name:sourceTimeZone
答案 0 :(得分:1)
使用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
答案 1 :(得分:0)
您已指定From 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,运行代码的系统的本地时区不是&#34; AUS Eastern Standard Time&#34;。如果传递给ConvertTimeToUtc方法的日期类型为Local,则该方法将期望sourceTimeZone参数与运行代码的系统的本地时区匹配。
您可以使用以下代码将dateTo的Kind属性设置为UnSpecified。通过这个你不会得到例外:
DateTime.SpecifyKind(dateTo, DateTimeKind.Unspecified);