mydt1 = Convert.ToDateTime(dt.Rows[0].ItemArray[7].ToString());
DateTime dt2 = DateTime.Now;
var hours = (dt2 - mydt1).TotalHours;
if (hours >= 0) {
txtElapse.Text = hours.ToString("0");
var totals = hours * 2;
txtFine.Text = totals.ToString("0");
} else {
txtFine.Text = "0";
txtElapse.Text = "0";
}
我正在創建一個圖書館系統,我正在處理罰款。但是,我想排除經過時間跨度的每個星期天。我不知道我該怎么做或我可以使用什么邏輯。
uj5u.com熱心網友回復:
所以你想得到 2 個 DateTime 之間的差異(TimeSpan),但忽略星期日。
這是我的最小可重現示例:
using System;
public class Program
{
public static void Main(string[] args)
{
DateTime dt1 = Convert.ToDateTime(args[0]);
DateTime dt2 = Convert.ToDateTime(args[1]);
TimeSpan x = dt2-dt1;
double hours = x.TotalHours;
int numOfWeek = (int)Math.Floor(x.TotalDays/7);
hours = hours - (numOfWeek * 24);
// if difference is more than 1 week, then subtract hours with week difference
DayOfWeek dt1_dow = dt1.DayOfWeek; // System.DayOfWeek is enum, 0=Sunday, 1=Monday, etc
DayOfWeek dt2_dow = dt2.DayOfWeek; // System.DayOfWeek is enum, 0=Sunday, 1=Monday, etc
if( (int)dt1_dow > (int)dt2_dow )
{
hours = hours - 24;
}
// if dt1's day of week is higher than dt2's day of week, then we can be sure that it go over one Sunday
Console.WriteLine(numOfWeek);
Console.WriteLine(hours);
}
}
您可以使用https://dotnetfiddle.net/或將其自己編譯為控制臺應用程式(在 Visual Studio 中)或將其另存為file.cs文本檔案,然后在 linux 中使用 mono 進行編譯rm file.exe ; csc file.cs ; mono file.exe '2021-11-05 03:00:00' '2021-11-10 03:00:00'
測驗:
$ cal
November 2021
Su Mo Tu We Th Fr Sa
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
測驗用例:
$ mono a.exe '2021-11-05 03:00:00' '2021-11-10 03:00:00'
0
96
- 日期 5 到 10:通過星期日,不超過 1 周,結果為 96 小時(正確,因為不計算星期日是 4 天)
$ mono a.exe '2021-11-03 03:00:00' '2021-11-05 03:00:00'
0
48
- 日期 3 到 5:不超過星期日,不超過 1 周,結果為 48 小時(正確,因為是 2 天)
$ mono a.exe '2021-11-03 03:00:00' '2021-11-15 03:00:00'
1
240
- 日期 3 到 15:未超過星期日,超過 1 周,結果為 240 小時(正確,因為這是 10 天,不計算星期日)
所以在你的代碼中:
mydt1 = Convert.ToDateTime(dt.Rows[0].ItemArray[7].ToString());
DateTime dt2 = DateTime.Now;
var hours = (dt2 - mydt1).TotalHours;
// start adding code
int numOfWeek = (int)Math.Floor(x.TotalDays/7);
hours = hours - (numOfWeek * 24);
DayOfWeek dt1_dow = dt1.DayOfWeek;
DayOfWeek dt2_dow = dt2.DayOfWeek;
if( (int)dt1_dow > (int)dt2_dow )
{
hours = hours - 24;
}
// end adding code
if (hours >= 0) {
txtElapse.Text = hours.ToString("0");
var totals = hours * 2;
txtFine.Text = totals.ToString("0");
} else {
txtFine.Text = "0";
txtElapse.Text = "0";
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/343280.html
上一篇:體系結構x86_64的重復符號
