teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

関数名の修正

2018/06/14 04:57

投稿

takabosoft
takabosoft

スコア8356

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 は {GetNearestHour(target, nTargetHour)}");
14
+ Debug.WriteLine($"{target} の直近の {nTargetHour:00}:00 は {GetPastLatestHour(target, nTargetHour)}");
15
15
  }
16
16
 
17
- internal static DateTime GetNearestHour(DateTime target, int nHour)
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

問題を理解していませんでした。

2018/06/14 04:57

投稿

takabosoft
takabosoft

スコア8356

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
- var now = DateTime.Now;
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 date = new DateTime(now.Year, now.Month, now.Day, 13, 0, 0);
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
- System.Diagnostics.Debug.WriteLine(date); // 2018/06/14 13:00:00
32
+ 2018/06/14 14:00:00 の直近の 13:00 は 2018/06/14 13:00:00
7
33
  ```