DateTime следующего возникновения 3:00

Вот мои 2 цента

 static class Program
    {
        [STAThread]
        static void Main()
        {
            bool createdNew;
            using (new Mutex(true, "MyApp", out createdNew))
            {
                if (createdNew) {
                    Application.EnableVisualStyles();
                    Application.SetCompatibleTextRenderingDefault(false);
                    var mainClass = new SynGesturesLogic();
                    Application.ApplicationExit += mainClass.tray_exit;
                    Application.Run();
                }
                else
                {
                    var current = Process.GetCurrentProcess();
                    foreach (var process in Process.GetProcessesByName(current.ProcessName).Where(process => process.Id != current.Id))
                    {
                        NativeMethods.SetForegroundWindow(process.MainWindowHandle);
                        break;
                    }
                }
            }
        }
    }
16
задан Shegit Brahm 21 June 2012 в 13:39
поделиться

5 ответов

Один вариант:

DateTime now = DateTime.Now;
DateTime today3am = now.Date.AddHours(3);
DateTime next3am = now <= today3am ? today3am : today3am.AddDays(1);

Другой:

DateTime now = DateTime.Now;
DateTime today = now.Date;
DateTime next3am = today.AddHours(3).AddDays(now.Hour >= 3 ? 1 : 0)

Множество способов снять шкуру с этой конкретной кошки :)

Это все, конечно, в местном времени, что означает, что вам не нужно беспокоиться о часовых поясах. Жизнь становится сложнее, если вы хотите задействовать часовые пояса ...

Обратите внимание, что неплохо было бы использовать DateTime.Now один раз , чтобы избежать проблем, если дата переносится, пока вы вычисление ...

29
ответ дан 30 November 2019 в 16:30
поделиться
DateTime now = DateTime.Now;
DateTime threeAM = now.Date.AddHours(3);

if (threeAM < now)
    threeAM = threeAM.AddDays(1);
5
ответ дан 30 November 2019 в 16:30
поделиться
//just add 24 - 3 = 21 hours and get Today (start of day) and Add 3 hour

DateTime now = DateTime.Now.AddHours(21).Today.AddHours(3);
3
ответ дан 30 November 2019 в 16:30
поделиться

Альтернатива (с использованием функции):

DateTime NextAt(TimeSpan time)
{
  DateTime now = DateTime.Now;
  DateTime result = now.Date + time;

  return (now <= result) ? result : result.AddDays(1);
}

назовите это так:

DateTime next3am = NextAt(new TimeSpan(3,0,0));
1
ответ дан 30 November 2019 в 16:30
поделиться

Вы можете сделать это без оператора if (или условного оператора):

// get the current time
DateTime now = DateTime.Now;
// get a 3:00 AM point in time in the future
DateTime next = now.Date.AddHours(24 + 3);
// subtract the number of whole extra days
next = next.AddDays((now - next).Days);

Я всегда объясняю, что вы должны получать момент времени (DateTime.Now) только один раз в таких вычислениях , поскольку это меняющееся значение, мне нужно его повторять? Хорошо, я только что сделал. ;)

1
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: