Brainstorming multiple calendars

I have been thinking about a concept for implementing multiple calendars, such as might be needed in a SCI-FI novel that takes place in two (or more) worlds. I came up with a concept that I hope is worth sharing:

Initially, I was trying to think how to design a system where any event occupying a date/time in Calendar A would tie to the equivalent date/time in Calendar B. So something at, say, 1 January 2025 on Earth would be, say, 4 Aardvark 5003 on Planet X. That seemed daunting because the developer, as stated by @Peter_T here, would have to develop an algorithm to tie the two calendars together–hard enough with known calendars but, I imagine, even harder with user-defined calendars.

That’s when I got an idea. Suppose AT allowed the creation of two or more custom calendars that are not programmatically connected except at the display level. A user could create two custom calendars (or use a default calendar and one custom calendar). In Calendar A, the user would designate a date/time; in Calendar B, the user would designate a date/time that is its equivalent. The user would then define a second, later date/time in Calendar A and define its equivalent in Calendar B. This would create a ratio between the two calendars, granular enough to account for, say, different planetary rotation speeds.

Here is the key concept: This ratio could then adjust the display between the two calendars so that there would be a visual way to see how an event in one calendar relates to the other. In other words, the visual scale of the calendars would be adjusted according to the ratio so that an event in one calendar would be visually adjacent to that date/time in the other. Scrolling/zooming could be tied so that scrolling/zooming one calendar would scroll the other according to the ratio.

This would work with more than two calendars, as well.

My coding days are well past, so I defer to @Peter_T and others who are more current in the realities of implementing something like this. However, wouldn’t this approach be considerably easier to implement than creating complex algorithms that more directly tie the calendars?

1 Like

That sounds quite simple. However, if you want to display the two time axes together, you need to know the conversion ratio you described above, i.e. the calendars are in any case programmatically linked in order be able to get the appropriate numbers of screen pixels.

So you may first have to work out how many “Planet X seconds” (or whatever you like to name the unit of your fictional timestamp) there are between “4 Aardvark 5003, 00:00” and “78 Coati 6007, 233:77” (which is February 29, 2029, 00:00), then the rest will be easy. In any case, this could be entered via a quite simple user dialog.

By the way, this makes me wonder how all the complicated conversion formulas come about, just think of the cycles of Jupiter’s moons.

Well, my math lessons were a while ago, but I think the complicated calculation is up to the user, who has to work out the right conversion ratio in advance (1). On the other hand, that would be fine for a pure fantasy calendar, where nobody is likely to be bothered by the linear approximation and the offset errors that accumulate over longer periods of time due to astronomical irregularities.

The only question is how many users will actually go through with it before the first one comes along and says “But in my world, the days of the week are counted backwards in the last month of every thirteenth year unless the seventh moon is full and the Planet Gora is in the House of the Sloth” :thinking:

Cheers,
Peter


(1)
t2(t1) = t2ref + t1 · Δt2 / Δt1

1 Like

I have been trying to come with a way that the user merely has to enter the particulars of each world’s system and then AT does that calculation for the ratio.

I gave it a shot in a posting just now, but then saw the flaw in my thinking, so I deleted it. So far, I cannot escape the requirement that the user must do some calculation work outside of AT. Maybe something useful will present itself. :slight_smile:

You’re basically right: Most of the math can be done by the software. The conversion is really simple as long as we assume a linear relationship between the progression of time, e.g. on Earth, and our fictional planet X.

However, as the two zero points (1-01-01, 00:00) do not coincide and the units of the time stamps are also different, the user must enter two base points so that the program can map the two calendars to each other.

The user must therefore enter at least three date/time values:

  • tx0 = date/time on planet X, on January 1 in year 1, 00:00 on Earth
  • te1 = any date/time on Earth
  • tx1 = the corresponding date/time on planet X

20250314_175225

In any case, the user cannot avoid determining these reference points. But with a purely fictional calendar, you can of course take the easy way out.

The ingenious thing about it, of course, is that it could be realized with a very simple user interface.

1 Like

Makes perfect sense. Nicely done.

Thank you. To come back to my suggestion in the other thread, you could of course program a nice tool yourself to calculate the fictional date/time, which would then be entered as properties of the events in AT.

The actual work would be in defining the different calendars and converting the date/time information into the respective timestamps. There are convenient standard library functions for the Gregorian calendar, but these do not usually work for negative dates. So you would have to put a bit of brainpower into it. Would be a nice exercise for a programming course, wouldn’t it?

1 Like

Sooooo tempting! Alas, I have to keep my focus on writing my manuscript.

That’s right. Enough of procrastinating. Back to the essential work!

1 Like

My desirement is simpler (I think) than above. I’ve got a single world, multiple cultures, and they have different calendars (4 or 5). Sort of like earth’s chinese/mayan/gregorian situation. So the time label on an event is different, depending on which culture’s calendar is being used. A day is still a day in all situations. So what I would like is to enter the calendars, show the sync day between them, and then be able to display all the event days in a particular calendars labeling with a menu selection. If I enter a new event, I just have to select which calendaring system is being used for all the dates. I don’t need to do any side-by-side comparison, I can just use the menu selection if I wanted to see all the dates. A bit of fancy, where mousing over a date would pull up a popup which showed all the calendar’s labels for that day, would be helpful…or put the list of applicable days in the inspector rather than dealing with popup complexity.

1 Like

The way I see it, this corresponds exactly to the situation mentioned above, except that there are several different calendar systems.

From a programmer’s point of view, you need a timestamp as an intermediate value (e.g. in seconds since the beginning of the era) in order to convert one system into the other. There must be a transformation rule for each of the calendars. It does not matter whether the calendars have the same length of the day.

1 Like

Thanx for the reply. Got it. I thought I had read back in 2.0 days that such a time stamp already was used internally by the program, and that the current calendar is just the single transformation rule that is to be applied. I figured picking a different transformation rule might work. Hmmm…but I neglected the display implications if presenting by week or month etc where lengths are different. Sigh. Too bad there isn’t some kind of AT user accessible script language that could be used in an AT field to do the transformation…sort of what FileMaker does. Talk about adding complexity!

Oh yes, that would be cool. Anyway, those who are willing to learn a scripting language already have amazing possibilities to inject custom data into AT via csv. I myself prefer Python, but it should also be possible to do a lot with Excel macros.

To pick up on the discussion above, you need a dedicated time stamp for each additional calendar and a routine that calculates the respective years, months, days, hours, etc. and vice versa.
The relationships between these different timestamps are described above by the diagram I drew with a bad felt-tip pen.

Yes, this time stamp can be found in the .aeonzip file, and its unit is seconds. The same applies to AT3, but it is harder to access, because its location may silently change with the AT3 versions. However, many scripting languages come with standard library functions to calculate such a time stamp for the Gregorian calendar, so the processing of the AT internal format with e.g. Python is no big deal. The other way round, you can reproduce the time stamp from the csv data.

Then you need a script routine that converts your fantasy years, months, etc. into the fantasy timestamp.
Next, you need an event property for the fantasy date in your AT project (e.g. local date/time) and, if you have several fantasy calendars, possibly another property with a selector for which calendar should apply.
You export this as a csv and run your script over it. After the reimport, each event has an alternative date-time that you can display in the timeline view. If you move the event, an update run is due.

This is where Aeon Timeline could be improved. If the proprietary file format is closed to third-party providers, it should at least be possible to initiate the csv import and export from outside. This would also include the option of specifying export profiles to limit the amount of data.

1 Like

Thanx

I am admittedly loath to exporting and script writing and then importing as I don’t trust the import process (well OK, I don’t trust me properly using the import process without munching up the entire file.).

So I continue to use external Excel for conversions. Sigh. Kind of a deal breaker for me eventually…had been hoping for some kind of integrated solution.

Thanx for what you do.

In this discussion, we swerved into the key concept of enabling users to create two or more custom calendars according to any criteria. Then, AeonTimeline aligns them for viewing. In my mind, there would be no need for external calculations.

1 Like

@SCN: Your suggestion has actually given me a vision of how the problem of multiple calendars for a timeline software could be solved from a user interface perspective. However, this does not lead to the expectation that this will also be picked up by the developers of AT.

Maybe it’s because I’m the hands-on DIY type, so the first thing I think of is an alternative solution with the means available. That’s why I feel that it actually makes sense to start here and also to take a critical look at the possibilities of importing and exporting.

1 Like

@Peter_T, I think we’ve had an important discussion about how to solve the multiple-timelines challenge in an enhancement to Aeon Timeline. That said, I appreciate your ideas on solving the challenge outside of the software; as you said, we have no reason to believe that this is a feature that will be offered.

1 Like

I appreciate this discussion because I recently started writing a SF novel that takes place on multiple worlds. It’s a tricky thing to track!

One idea, (and I suspect this is fundamentally different than how AT is currently programmed), is maybe AT needs to track time in the same way real-life computers do: with UTC milliseconds. Or, if that’s too granular for AT, use UTC “minutes” or “hours”

In real life, “UTC 0” = midnight of Jan 1, 1970. Most computers count in milliseconds from that date. So it’s roughly 1744756728000 right now as I type this.

My point: if AT had a method of mapping “UTC 0” to an arbitrary date on a custom calendar, then it’s easy enough to apply that to multiple calendars.

… Assuming 1 millisecond is the same everywhere thoughtout the universe. :slight_smile:

1 Like

The idea I’ve put forth is that AT could give the user the ability to create multiple instances of a custom timeline. The user would select an event and mark it in each timeline, then select a second event and mark it in each timeline; this gives AT the ability to develop a display ratio(s) between the timelines. It should then be possible to scroll the timelines together, with the display of each timeline scaling to display events on, say, World A where they would take place on the timeline of, say, World B.

In other words, the underlying structure of AT would not need to be changed other than allowing multiple timelines and adding the scaling of the timelines so that they always correctly line up visually for the user.

Since I don’t use the Timeline view very much, I’ve assumed that it works perfectly fine for creating a timeline for a calendar that fits another world’s calendar. If not, that is perhaps a separate but related aspect–this is where the idea of basing things on UTC milliseconds or whatever seems to fit, perhaps.

Interesting discussion!

Well, what you’re describing is actually the timestamp that was talked about earlier. As I said, the program seems to calculate internally with the number of seconds since the beginning of the era.

If you use the Gregorian calendar, there are functions available in many programming languages to obtain such a timestamp. Also the POSIX timestamp, provided the date is after 1-1-1970. However, the fractions of a second are not taken into account in our case. If I’m not mistaken, you can’t access the timestamp from the Aeon user interface either. But would it help you at all?

I would follow the path that others have already taken and define a fictional “star date” that is used as a reference everywhere.

However, this brings us to an interesting topic that has so far received too little attention. If Albert Einstein is right, time passes more slowly in moving systems when viewed from the outside. It is the so-called time dilation that has repeatedly ensured in SF that star travelers find Earth centuries older when they return from an interstellar journey.
And if we assume an expanding universe, all solar systems and galaxies move relative to each other, which would lead to an infinite variety of mutual time shifts. Now that’s what I call a real challenge for Aeon Timeline.

1 Like

But is it? Let’s assume for a moment that the novelist has a scene where the hero’s spaceship is approaching the event horizon of a black hole (so, a massive gravity field), and she’s brushing her teeth. The novelist will decide how long it takes the hero to brush her teeth from the hero’s perspective. Based on physics knowledge or assistance from AI, the author should then be able to calculate how long this takes according to an observer on Earth. Thus, the novelist can establish the start and end date/time of the hero brushing her teeth (presumably in seconds or minutes) and the start and end time observed on Earth (presumably, months or years). Thus, we have the start date/time and end date/time on each timeline, which would allow AT, using the visual ratio/scaling approach we’ve been kicking around, to show the tooth-brushing event in the two timelines.

Thoughts?