On Thursday, 12 May 2022 at 16:57:35 UTC, H. S. Teoh wrote:
Does your DateTime type support the `++` operator?
It can't because I only want to use the quantities.si.Time type
to do arithmetic with my DateTime. In my previous DateTime, it
was a lot of problem that I was doing math on it's raw internal
variable (which was a double where 1.0 meant 1 day.)
In the new version adding int(1) does a compilation error.
I will use 1*second or 1*day or 1*micro(second) instead. I will
always state the measurement unit to avoid confusions.
But I'm curious, why didn't you use std.datetime?
There are many weird reasons:
5 years ago I moved to DLang from Delphi. Since 20 years I always
used the old Borland date system whist stards in 1899, is an
ieee double, 1 = 1 day. I only did stuff with local times, it was
enough.
Recently I had to work with Python as well, and there I started
to have problems with time synchronizations between the 2
systems. I ended up sending the exact Borland time to the Python
program and make my little routines to work with them exactly
like I do 20 years ago in Delphi, 5 years ago in DLang. But I
know it is not nice.
So a week ago I discovered the quantities package and I decided
to rewrite my DateTime to use the Time type in that. It solves
all my measurement unit madness in a very elegant way. So I also
want those measurement units working in all my systems. (I have
lengths, frequencies too)
For me std.datetime was not an option because that felt so big I
scared of it at the first look. It's 1.5MB, the same size as my
complete program I'm working on :D
I also hade a second based time measurement 'system', it used
QueryPerformanceCounter. I want do discontinue that as well.
So these are the features of the new DateTime:
- small size: 64 uint is the internal format. (Half of
std.systemtime, but it lacks timezone, it's only UTC internally).
- precise: 100.0/64 nanosecond is the smallest unit. It covers
913 years.
- It was built around the new WinAPI
GetSystemTimePreciseAsFileTime() It gives me 100ns resolution UTC
time in less than 50ns. So that's why I don't need
QueryPerformanceCounter anymore.
- The extra 6 bits under the 100ns ticks will be used for time
based unique ID generation. It's better for me than having 60000
years at my hand.
- The integration with quantities.si makes my work much easier. I
can't wait to use it in my program, as I knows physics things
better than me, haha.
std.range.recurrence.
Indeed, that's an option as well, I forgot about.
Thank You!