C# 如何在c语言中获得不同时区的两个日期时间的总时间#

C# 如何在c语言中获得不同时区的两个日期时间的总时间#,c#,C#,我有两次约会 Datetime d1 = Convert.ToDateTime("2018-03-13T00:30"); Datetime d2 = Convert.ToDateTime("2018-03-14T06:05"); d1 Datetime timezone is "8" d2 Datetime timezone is "-7" 如何计算两个日期时间之间的总时间 我正在使用这个代码 var calc = (d1 - d2); var hours = calc.Hours - (d

我有两次约会

Datetime d1 = Convert.ToDateTime("2018-03-13T00:30");
Datetime d2 = Convert.ToDateTime("2018-03-14T06:05");

d1 Datetime timezone is "8"
d2 Datetime timezone is "-7"
如何计算两个日期时间之间的总时间

我正在使用这个代码

var calc = (d1 - d2);
var hours = calc.Hours - (d1_timezone - (d2_timezone));

但是(-)负值中的小时数

您只需要将时间放入一个公共时区,然后计算出差值:

Datetime d1 = Convert.ToDateTime("2018-03-13T00:30");
Datetime d2 = Convert.ToDateTime("2018-03-14T06:05");

// this is now "2018-03-13T08:30"
Datetime d1Common = d1.AddHours(8);
// this is now "2018-03-13T11:05"
Datetime d2Common = d2.AddHours(-7);

//TimeSpan difference = d1Common - d2Common;
//I'm pretty sure you want the difference this way around.
TimeSpan difference = d2Common - d1Common;
int hoursDifference = difference.TotalHours;
int daysDifference = difference.TotalDays;
//   .....etc.

如果这些是正确的时区,则d1和d2之间的差值将为负值。首被告发生在次被告之前。即使考虑到时差,我认为您可能想要
d2comon-d1Common

您只需要将时间输入一个公共时区,然后计算出时差:

Datetime d1 = Convert.ToDateTime("2018-03-13T00:30");
Datetime d2 = Convert.ToDateTime("2018-03-14T06:05");

// this is now "2018-03-13T08:30"
Datetime d1Common = d1.AddHours(8);
// this is now "2018-03-13T11:05"
Datetime d2Common = d2.AddHours(-7);

//TimeSpan difference = d1Common - d2Common;
//I'm pretty sure you want the difference this way around.
TimeSpan difference = d2Common - d1Common;
int hoursDifference = difference.TotalHours;
int daysDifference = difference.TotalDays;
//   .....etc.
如果这些是正确的时区,则d1和d2之间的差值将为负值。首被告发生在次被告之前。即使考虑到时差,我认为您可能希望使用
d2comon-d1Common

,它几乎是
DateTime
,具有明确的
Offset
属性,因此它具有时区的概念。它专门为处理此类案件而存在

var d1 = DateTimeOffset.Parse("2018-03-13T00:30+8");
var d2 = DateTimeOffset.Parse("2018-03-14T06:05-7");
Console.WriteLine((d2 - d1).TotalHours); // -> 44.5833333333333
您应该使用,它相当于
DateTime
,带有显式的
Offset
属性,因此它有时区的概念。它专门为处理此类案件而存在

var d1 = DateTimeOffset.Parse("2018-03-13T00:30+8");
var d2 = DateTimeOffset.Parse("2018-03-14T06:05-7");
Console.WriteLine((d2 - d1).TotalHours); // -> 44.5833333333333

我喜欢你写“通用”而不是强制“UTC”,即使它可能是UTC。是的,OP对此不清楚,所以可能是当地时间,而不是UTCI,就像你写“通用”而不是强制“UTC”,即使它可能是UTC。是的,OP对此不清楚,所以可能是当地时间而不是UTC