Rok zerowy

Rok zerowy

Czy zastanawialiście się kiedyś nad problemem roku zerowego? Czy był w ogóle taki rok? Konkretnie, czy Jezus narodził się w pierwszym roku naszej ery czy może wcześniej? W zasadzie w internecie można znaleźć sporo dywagacji na ten temat, ale opinia jest raczej zgodna - nie ma czegoś takiego jak rok zerowy.  No dobrze, ale jeśli założymy, że Jezus urodził się 25 grudnia roku pierwszego (choć podobno był to raczej wrzesień), to pierwsze urodziny obchodził w drugim roku naszej ery, prawda? No jest problem. Na szczęście mamy XXI wiek i sprawdzone narzędzia do rozwiązywania problemów obliczeniowych. Dlaczego by tak nie spytać o istnienie roku zerowego naszego ulubionego programu?

Datetime

W MATLABIE, jak i w wielu innych środowiskach obliczeniowych, daty/czas zapisywane są jako liczba wskazująca, ile dni, godzin, sekund, czyli ogólnie jednostek czasu upłynęło od umownego punktu startowego. W MATLABie tym punktem startowym jest początek naszej ery, a czas jest odmierzany w dniach. Można to sprawdzić wpisując w linii poleceń now - w wyniku pokaże się dosyć duża liczba mówiąca nam, ile to już dni nam w naszej erze przeszło. Oczywiście wszelkie obliczenia związane z czasem są przy takim sposobie jego zapisywania dosyć karkołomne. Właśnie dlatego do MATLABa wprowadzono obiekt datetime ułatwiający reprezentowanie czasu w zrozumiały dla użytkownika sposób. Działa to na tej zasadzie, że czas w komputerowych trzewiach jest zapisywany po staremu, jednak nam, użytkownikom, przedstawiany jest czytelnie. W praktyce nabierze to sensu. Sprawdźmy dla przykładu, ile dni na ziemskim padole przeżył Albert Einstein.

albert-einstein-1100450_640
W pierwszej kolejności wprowadzić należy daty urodzenia i zgonu uczonego.

narodziny = datetime('14-mar-1879');
smierc = datetime(1955, 4, 14);

Czas życia otrzymujemy  po prostu odejmując od siebie daty. Wynikowy obiekt posiada metodę days umożliwiającą przedstawienie czasu jako liczby dni.

czas_zycia = smierc - narodziny;
days(czas_zycia)

ans =

27789

Zazwyczaj tworząc obiekt typu datetime jako argument wejściowy funkcji podajemy datę w "ludzki" sposób, można jednak dokonać konwersji z tradycyjnego formatu "dniowego". Dla przykładu:

today = datetime(now, 'ConvertFrom', 'datenum')

Wróćmy więc do początku. Wyznaczmy datę dla pierwszego dnia naszej ery i sprawdźmy, który to był rok.

dayOne = datetime(1, 'ConvertFrom', 'datenum')

dayOne=

01-Jan-0000 00:00:00

Hmm... Wynika z tego, że dla MATLABa rok zerowy jednak istnieje... 🙂

(Visited 163 times, 1 visits today)

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *