从 24 小时中减去时间跨度
Subtracting timespan from 24 hours
我正在尝试从 24 小时中减去可能为负的时间跨度值,以将它们更改为正值。
举个例子:
我想知道到 8:00 上午还有多少时间。
如果现在是 16:00 下午,timespan 给了我 -8 左右的值,所以我想从 24 中减去它得到 16。
我正在尝试这个,但它给了我这个错误
The DateTime represented by the string is not supported in calendar
System.Globalization.GregorianCalendar.
我试过的;
string startTime = String.Format("{0:t}", "8:00");
TimeSpan timeLeft = Convert.ToDateTime(startTime).Subtract(DateTime.Now);
if (timeLeft.TotalMinutes < 0 )
{
timeLeft = Convert.ToDateTime(String.Format("{0:H}","24:00")).Subtract(Convert.ToDateTime(timeLeft.Negate())) ;
}
我怎样才能从 24 小时中减去潜在的负面时间跨度?
您混淆了 TimeSpan
和 DateTime
。我想有一个更简单的方法:
var eightOClock = TimeSpan.FromHours(8);
var now = DateTime.Now;
var till8again = now.TimeOfDay > eightOClock
? TimeSpan.FromHours(32) - now.TimeOfDay
: eightOClock - now.TimeOfDay;
因此,如果 TimeOfDay
少于八小时(早上 8 点之前),我们将差值计算为早上 8 点。如果大于早上 8 点,我们将差值取为 32 小时,即明天早上 8 点。
DateTime 是一个绝对日期,发生在某日、某月、某年……不能用来表示特定的时间。
因此,您尝试在 DateTime 中转换“8:00”或“24:00”将强制失败。
为此,您必须使用 TimeSpan(如果您始终使用小时数,则最终使用整数)。
你可以使用例如
if(DateTime.Now.TimeOfDay > TimeSpan.FromHours(8))
查看是否大于或小于8:00。
TimeOfDay 将 return 你今天从午夜开始经过的时间。
DateTime 也有很多有用的方法来加减时间,详见https://msdn.microsoft.com/fr-fr/library/system.datetime(v=vs.110).aspx
用TimeSpan
,如果startDate
小于Now
,加一天再比较。
TimeSpan startTime = new TimeSpan(8,0,0);
TimeSpan now = DateTime.Now.TimeOfDay;
startTime = startTime < now ? startTime.Add(TimeSpan.FromDays(1)) : startTime;
TimeSpan diff = startTime - now;
另一点:错误来自于 24:00 不代表 12:00 午夜。 0:00 表示午夜,这将是一个有效的日期时间。
我正在尝试从 24 小时中减去可能为负的时间跨度值,以将它们更改为正值。
举个例子:
我想知道到 8:00 上午还有多少时间。
如果现在是 16:00 下午,timespan 给了我 -8 左右的值,所以我想从 24 中减去它得到 16。
我正在尝试这个,但它给了我这个错误
The DateTime represented by the string is not supported in calendar System.Globalization.GregorianCalendar.
我试过的;
string startTime = String.Format("{0:t}", "8:00");
TimeSpan timeLeft = Convert.ToDateTime(startTime).Subtract(DateTime.Now);
if (timeLeft.TotalMinutes < 0 )
{
timeLeft = Convert.ToDateTime(String.Format("{0:H}","24:00")).Subtract(Convert.ToDateTime(timeLeft.Negate())) ;
}
我怎样才能从 24 小时中减去潜在的负面时间跨度?
您混淆了 TimeSpan
和 DateTime
。我想有一个更简单的方法:
var eightOClock = TimeSpan.FromHours(8);
var now = DateTime.Now;
var till8again = now.TimeOfDay > eightOClock
? TimeSpan.FromHours(32) - now.TimeOfDay
: eightOClock - now.TimeOfDay;
因此,如果 TimeOfDay
少于八小时(早上 8 点之前),我们将差值计算为早上 8 点。如果大于早上 8 点,我们将差值取为 32 小时,即明天早上 8 点。
DateTime 是一个绝对日期,发生在某日、某月、某年……不能用来表示特定的时间。 因此,您尝试在 DateTime 中转换“8:00”或“24:00”将强制失败。
为此,您必须使用 TimeSpan(如果您始终使用小时数,则最终使用整数)。
你可以使用例如
if(DateTime.Now.TimeOfDay > TimeSpan.FromHours(8))
查看是否大于或小于8:00。
TimeOfDay 将 return 你今天从午夜开始经过的时间。
DateTime 也有很多有用的方法来加减时间,详见https://msdn.microsoft.com/fr-fr/library/system.datetime(v=vs.110).aspx
用TimeSpan
,如果startDate
小于Now
,加一天再比较。
TimeSpan startTime = new TimeSpan(8,0,0);
TimeSpan now = DateTime.Now.TimeOfDay;
startTime = startTime < now ? startTime.Add(TimeSpan.FromDays(1)) : startTime;
TimeSpan diff = startTime - now;
另一点:错误来自于 24:00 不代表 12:00 午夜。 0:00 表示午夜,这将是一个有效的日期时间。