Oszukanie kalendarzy (własny system dat) czas wirtualny

0

Cześć.

Ktoś kto śledzi mój projekt to wie, że tworze uniwersum RPG. Encyklopedia już jest, bestiariusz, system magii, i inne wyliczenia. Pora zabrać się za czas... i tu pojawia się problem. Komponenty czas i dat, kalendarze i cała reszta bazuje na aktualnym czasie.
a co jeżeli opisuje jednocześnie, nasz świat (powiedzmy Ziemia) świat "inny" związany z "HeroicFantasy" czy świat SF.

Dotychczas opis jakiegoś władcy opiera się na zwykłym tekście "Roderion z Karmazynowych wysp rządził przez 70 lat na początku 2 ery."
lipa bo nie da się wyciągnąć w taki sposób jacy byli władcy w wyznaczonym okresie, albo kto był jego następcą..

Da się zrobić coś w rodzaju "data zerowa" i komponenty będą brały dane z tej daty? A może macie inne pomysły?
Potrzebuje np dokonać zapytania w bazie jacy władcy panowali pomiędzy datą A a datą B. Normalnie to nie problem ale mając kilka światów?

Chwilowo jedyne co mi przychodzi do głowy to rozpocząć "naliczanie" pewnych dat np od 3000 roku i przypisać, że np od 3000 do 3458 będzie pierwsza era. ale to wydaje się "jakieś takie" nie właściwe.

Coś, ktoś, gdzieś?

5

Ja chyba nie rozumiem do końca. Gdzie konkretnie jest problem?

Ogólnie liczenie czasu to trudna i wredna działka, natomiast typowym rozwiązaniem jest właśnie ustalenie "daty 0" i liczenie od tego momentu – czy to sekund, dni, minut, czy jakiejkolwiek innej jednostki czasu. W podobny sposób jak działa unix timestamp, tj. liczba sekund od północy 1 stycznia 1970 roku UTC. Albo inny czas juliański, gdzie liczymy dni (i części ułamkowe dni) od 1 stycznia 2000 roku (J2000.0). I jeżeli liczysz w taki sposób, to potem się da transformować, np. oznaczając, że 1. era zaczęła się w czasie 0 i trwała do dnia 2345.0, a Roderion panował w dniach 2345.0 do 25550.0 (70 lat, zakładając, że rok ma 365 dni). Jeżeli masz monotoniczny, ściśle rosnący system liczenia czasu, to potem możesz bez problemu dokładać tam wszystko, o czym zamarzysz, łącznie z sekundami przestępnymi i cyklami lunisolarnymi.

Natomiast co do komponentów i wyświetlania/pobierania czasu, to to nie ma sensu, aby próbować zmuszać wbudowane komponenty do przyjmowania/wyświetlania twojego czasu. Nawet jak pójdziesz do roku 3236 to i tak doba będzie miała 24 godziny, a rok 12 miesięcy, co może być kompletnie niezgodne z twoim światotwórstwem. Niestety, ale najlepszym systemem będzie zrobienie wszystkiego od zera, jako zestawu własnych komponentów, które już np. miesiące będą pobierały z zewnętrznej listy, a nie "z systemu". A i tutaj może być problem, w zależności od tego, jak skomplikowany zbudujesz system liczenia czasu.

Zobacz np. jak bardzo rozbudowany jest (i może być) https://app.fantasy-calendar.com/

Bawię się w podobne klimaty (światotwórstwo/worldbuilding) i poszedłem w stronę liczenia sekund od "daty 0". Mimo że system liczenia czasu nie jest oparty o sekundę, ale o własną jednostkę ban, to mam przeskalowanie do SI – ban trwa 0,45 sekundy i na tej podstawie robię sobie wyliczenia. Ale już kalendarz opiera się o 10 miesięcy, które mają po 31 dni, podzielone na 3 tygodnie po 10 dni, które mają swoje nazwy, plus "dzień specjalny", który nie jest częścią żadnego tygodnia. Żaden wbudowany komponent nie obsługuje takich kombinacji, a nie doszliśmy jeszcze do tego, że nazwy (dni/miesięcy) są we własnym języku...

I jeszcze co do wielu światów – musisz mieć synchonizmy, tj. takie daty, które zdarzyły się w znanych momentach w wielu światach. Czyli na przykład wiedzieć, że "data 0" świata A to "8521 dzień, 8 godzina i 12 sekunda" świata B. I potem można to sobie obliczać, ale jak chcesz zrobić zapytania do bazy to i tak musisz podawać, w jakim czasie pytasz ;) Dla wielu światów warto mieć "wspólny" czas, nawet jeżeli fabularnie jest nieuzasadniony.

1
Aleksander Sanetra napisał(a):

Ktoś kto śledzi mój projekt to wie, że tworze uniwersum RPG.

A jak nie, dużo stracił ?

Oczywistym w każdym obiektowym i kształtującym obiektowe myślenie języku powołanie stosownej abstrakcji / kontenera / ekaspsulacji, i tam zaimplementowanie daty narnisjkiej czy jakiejkolwiek innej. *)
Jakiś enum na epokę (nie tylko dwie przed i po) ... wszystko bezproblemowo do zrobienia.

Niech wyczuję, problem jest gdzie indziej, pytamy na gruncie Delphi i nie mamy żadnych abstrakcji w projekcie ? Mamy tylko surowe liczby na komponenatch VCL ?

*) wieki temu w Javie obowiązywał pakiet datowy, który posiadał WSZYSTKO, najdziksze formuły okreslania dat i czasu w jakis fantastycznych społecznościach (fakt, na kuli ziemskiej chyba, choć nie jestem pewien, gdzieś w karierze mi mignęły kalendarze marsjańskie czy jowiszowe) łącznie (chyba) z systemem datowym Suahili Dolne, gdzie największą liczbą jest 3. Była to otwarta lista - nowe standardy można było dokładać.
Kto używał, ten się w cyrku nie śmieje.

0
Ktos napisał(a):

Ja chyba nie rozumiem do końca. Gdzie konkretnie jest problem?

Ogólnie liczenie czasu to trudna i wredna działka, natomiast typowym rozwiązaniem jest właśnie ustalenie "daty 0" i liczenie od tego momentu

Wredna.

BTW w naszej europejskiej cywilizacji nie ma roku zero, śmiesznie się liczy długosc życia niektóry Greków czy Rzymian.
Nie było roku zerowego i w innych konwencjach (od zał. Rzymu czy podobnych, po prostu Zera jeszcze nie było, a dziś mamy Zero nawet ministrem)

1
ZrobieDobrze napisał(a):

Jakiś enum na epokę (nie tylko dwie przed i po) ... wszystko bezproblemowo do zrobienia.

Gdyby robił Super-Hiper-Datę na ziemską historię bym zrobił arytmetykę fuzzy-logic.

Z jakiem prawdopobieństwem 12 Czi 1217 roku epoki Wong jest wcześniej / pózniej 1 Szuruszur 734 roku 4 dynastii - mając nieliczne i miękkie elementy synchronizacyjne, np odnotowane gwiazdy supernowe itd.

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