Uzyskanie czasu końcowego po 12H stosując DateTimePicker

0

Witam.
Potrzebuję uzyskać na kontrolce "DateTimePicker" końcową godzinę, po odmierzeniu od pierwszej kontrolki 12h (uwzględniając dni).
Szerzej: Posiadam trzy kontrolki:

DateTimePicker1 - Czas początkowy ustawiany ręcznie;
DateTimePicker2 - Aktualny czas systemowy;
DateTimePicker3 - Czas końcowy tj. DateTimePicker1 + doliczone 12h;

Przechwytywanie Kontolki DateTimePicker.JPG

właśnie ta ostatnia kontrolka to temat dla mnie póki co nie do przeskoczenia.

Potrzebuję aby ta godzina z datą była automatycznie podawana uwzględniając dzień następny.
Odmierzanie czasu pracy 12h, czyli zaczynając prace o godzinie 0600 AM koniec o 1800 PM (ten sam dzień)
lub Start o 1800 PM dnia 01.12.2021 koniec 0600 AM dnia 02.12.2021.

Przechwytywanie Odliczanie czasu.JPG

Kod wygląda następująco:

private void czas1_Tick(object sender, EventArgs e)
        {
            DateTime timeStart = dateTimePicker1.Value;     /* czas początkowy ustawiany ręcznie */
            DateTime timeStop = dateTimePicker2.Value;      /* czas aktualny systemowy */
                     timeStop = DateTime.Now;
            DateTime timeEnd = dateTimePicker3.Value;       /* czas końcowy automatycznie odliczający 12h */
            
            TimeSpan difference = timeStop - timeStart;     /* Bieżący czas pracy */
            lab_timeDiference.Text = difference.ToString(); /* Label wyświetlający aktualnie przepracowany czas */
            TimeSpan timeCountdown = timeStop - timeEnd;    /* Pozostały czas pracy */
            lab_timeCountdown.Text = timeCountdown.ToString(); /* Label wyświetlający pozostały czas pracy */

Przechwytywanie Wizualizacja1.JPG

2

Albo nie zrozumiałem, albo wydaje się bardzo proste:

// ten sam dzień
var czasPoczatkowy = new DateTime(2021, 12, 1, 6, 0, 0); //01-12-2021 06:00:00
var czasKoncowy = czasPoczatkowy.AddHours(12);           //01-12-2021 18:00:00

// następny dzień
var czasPoczatkowy = new DateTime(2021, 12, 1, 15, 0, 0); //01-12-2021 15:00:00
var czasKoncowy = czasPoczatkowy.AddHours(12);           //02-12-2021 03:00:00

Aby po zmianie czasu początkowego DateTimePicker1 nastąpiła zmiana wartości w kontrolce DateTimePicker3 musisz podpiąć się do zdarzenia ValueChanged (zakładając, że korzystasz z WinForms)

Coś w tym stylu:

DateTimePicker1.ValueChanged += new EventHandler(DateTimePicker1_ValueChanged);

private void DateTimePicker1_ValueChanged(object sender, EventArgs e)
{
    DateTimePicker3.Value = DateTimePicker1.AddHours(12);
}

Przy okazji pomyśl nad nazwami zmiennych. DateTimePicker1 jest zbyt ogólne i nie wiele mówi na temat zastosowania. Dziś ty to rozumiesz, ale za tydzień sam będziesz się już zastanawiał, która data czego dotyczy.

0

@Grzegorz Kotfis: Dzięki wielkie Grzegorz Kotfis, uzyskałem to chcaiałem.

Wystarczyło dodać jedną linijkę :

dateTimePicker3.Value = timeStart.AddHours(12);

Dodatkowo dowiedziałem się nowych rzeczy.
Pozdrawiam i jeszcze raz dziękuję.

1 użytkowników online, w tym zalogowanych: 0, gości: 1