Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Jak w C++ wstawić własną(!) datę?

Ostatnio zmodyfikowano 2015-05-13 19:42
Autor Wiadomość
Dreux
Temat założony przez niniejszego użytkownika
Jak w C++ wstawić własną(!) datę?
» 2015-05-12 11:28:25
Znane są mi jedynie funkcje, które pobierają czas lokalny albo UTW. Tymczasem chce, by dany program wykonywał się do godziny X. Jak wiadomo, obecnie mam godzinę "lokalną", a więc szukam sposobu, by ustawić własną datę. Załóżmy od teraz w stringu czas będzie data z 2018 roku. Z góry dziękuję, pozdrawiam.

Edit:wiem, że można to zrobić poprzez porównanie stringów (ten drugi napisałabym "ręcznie" i dopóki pierwszy z localtime nie będzie się zgadzać z drugim to pętla będzie wykonywana), lecz nie wydaje się to być zbyt profesjonalną metodą.
P-132121
Monika90
» 2015-05-12 12:26:43

Edit:wiem, że można to zrobić poprzez porównanie stringów (ten drugi napisałabym "ręcznie" i dopóki pierwszy z localtime nie będzie się zgadzać z drugim to pętla będzie wykonywana), lecz nie wydaje się to być zbyt profesjonalną metodą.

To jest prawdopodobnie dobry pomysł, tylko zamiast porównywać stringi lepiej porównywać wartości typu time_t, czyli to co zwraca funkcja time. Za pomocą funkcji mktime można zamienić datę na time_t. Całość mogłaby wyglądać tak
C/C++
#include <iostream>
#include <chrono>
#include <thread>
#include <ctime>

std::time_t make_time_t( int year, int month, int day, int hour, int min, int sec )
{
    std::tm t { };
    t.tm_year = year - 1900;
    t.tm_mon = month - 1;
    t.tm_mday = day;
    t.tm_hour = hour;
    t.tm_min = min;
    t.tm_sec = sec;
    t.tm_isdst = - 1; //Tylko co tu podać? To jest pytanie...
    return std::mktime( & t );
}

int main()
{
    const auto deadline = make_time_t( 2015, 5, 12, 12, 30, 0 );
    while( std::time( nullptr ) < deadline )
    {
        std::cout << '.';
        std::this_thread::sleep_for( std::chrono::seconds( 1 ) );
    }
   
    std::cout << "\ntimeout\n";
}
P-132122
darko202
» 2015-05-12 12:30:13
można też napisać własną klasę podobną do CTime z
http://www.codeproject.com​/Articles/3049​/Date-and-Time-in-C


P-132123
Dreux
Temat założony przez niniejszego użytkownika
» 2015-05-13 17:47:48
@Monika90, a czy przypadkiem przedstawiony program nie będzie ograniczony? Przykładowo program ma być uruchamiany codziennie, zawsze w różnych godzinach. I ma się kończyć zawsze ileś czasu potem. Jeżeli weźmiemy to bardziej toporne rozwiązanie to będzie ono w porządku, ale na jeden dzień. Bo potem będzie trzeba ciągle zmieniać datę, co jest po prostu męczące i dalekie od perfekcjonizmu. Dlatego szukam rozwiązania uniwersalnego.
P-132197
pekfos
» 2015-05-13 17:55:15
I ma się kończyć zawsze ileś czasu potem.
Samo time().
C/C++
const auto deadline = std::time( nullptr ) + T;
while( std::time( nullptr ) < deadline )

Dlatego szukam rozwiązania uniwersalnego.
To dlaczego pytasz o ograniczone rozwiązanie..? Chcesz uniwersalnie, masz biblioteki <ctime> i <chrono>. Używaj według potrzeb.
P-132199
Maciek
» 2015-05-13 19:02:26
Dodam tylko, że jest wiele zewnętrznych bibliotek, które umożliwiają w sposób bardzo zaawansowany obsługę daty i czasu. Jedną z takich bibliotek, jest biblioteka boost, polecam zapoznać sie z:
http://www.boost.org/doc/libs​/1_58_0/doc/html/date_time.html
P-132207
Monika90
» 2015-05-13 19:42:31
C/C++
#include <iostream>
#include <chrono>
#include <thread>

int main()
{
    using namespace std::chrono_literals;
    const auto now = std::chrono::steady_clock::now;
    const auto deadline = now() +( 1h + 15min + 25s );
    while( now() < deadline )
    {
        std::cout << '.';
        std::this_thread::sleep_for( 500ms );
    }
}
u mnie działa
P-132208
« 1 »
  Strona 1 z 1