回答編集履歴
2
関数名の修正
answer
CHANGED
@@ -11,10 +11,10 @@
|
|
11
11
|
internal static void Test(int nYear, int nMonth, int nDay, int nHour, int nTargetHour)
|
12
12
|
{
|
13
13
|
var target = new DateTime(nYear, nMonth, nDay, nHour, 0, 0);
|
14
|
-
Debug.WriteLine($"{target} の直近の {nTargetHour:00}:00 は {
|
14
|
+
Debug.WriteLine($"{target} の直近の {nTargetHour:00}:00 は {GetPastLatestHour(target, nTargetHour)}");
|
15
15
|
}
|
16
16
|
|
17
|
-
internal static DateTime
|
17
|
+
internal static DateTime GetPastLatestHour(DateTime target, int nHour)
|
18
18
|
{
|
19
19
|
var sameDay = new DateTime(target.Year, target.Month, target.Day, nHour, 0, 0);
|
20
20
|
|
1
問題を理解していませんでした。
answer
CHANGED
@@ -1,7 +1,33 @@
|
|
1
|
+
質問の内容を間違えて読み取ってしまったので修正します。
|
1
|
-
|
2
|
+
今日のN時か昨日のN時かを返せば良いと思います。
|
2
3
|
|
3
4
|
```csharp
|
5
|
+
private void button1_Click(object sender, EventArgs e)
|
6
|
+
{
|
4
|
-
|
7
|
+
Test(2018, 6, 14, 12, 13);
|
8
|
+
Test(2018, 6, 14, 14, 13);
|
9
|
+
}
|
10
|
+
|
11
|
+
internal static void Test(int nYear, int nMonth, int nDay, int nHour, int nTargetHour)
|
12
|
+
{
|
5
|
-
var
|
13
|
+
var target = new DateTime(nYear, nMonth, nDay, nHour, 0, 0);
|
14
|
+
Debug.WriteLine($"{target} の直近の {nTargetHour:00}:00 は {GetNearestHour(target, nTargetHour)}");
|
15
|
+
}
|
16
|
+
|
17
|
+
internal static DateTime GetNearestHour(DateTime target, int nHour)
|
18
|
+
{
|
19
|
+
var sameDay = new DateTime(target.Year, target.Month, target.Day, nHour, 0, 0);
|
20
|
+
|
21
|
+
if (sameDay <= target)
|
22
|
+
{
|
23
|
+
return sameDay; // 同じ日のnHour時
|
24
|
+
}
|
25
|
+
return sameDay - TimeSpan.FromDays(1); // 一日前のnHour時
|
26
|
+
}
|
27
|
+
```
|
28
|
+
|
29
|
+
出力:
|
30
|
+
```text
|
31
|
+
2018/06/14 12:00:00 の直近の 13:00 は 2018/06/13 13:00:00
|
6
|
-
|
32
|
+
2018/06/14 14:00:00 の直近の 13:00 は 2018/06/14 13:00:00
|
7
33
|
```
|