Posts: 2,700
Threads: 124
Joined: Apr 2022
Reputation:
134
(03-01-2023, 09:58 AM)SMcNeill Wrote: You can get an UNIX timestamp from my posts here: https://staging.qb64phoenix.com/showthread.php?tid=65
From it, it's easy enough to turn various dates into timestamps and then subtract them to see the difference in number of days between them and such.
+1 I agree! The main work has been done by converting any date + time into a number to which minutes, hours, days, weeks added or subtracted. Years might be tricky with leap years...
b = b + ...
Posts: 1,510
Threads: 53
Joined: Jul 2022
Reputation:
47
(03-01-2023, 02:40 PM)Balderdash Wrote: SYSTEMTIME (minwinbase.h) - Win32 apps | Microsoft Learn
Simple conversion of the small sample at the bottom of that page:
(code)
Clever use of "printf()" in this one! Although I would define like 20 more examples for combinations like string, string, integer... makes me think of trig class: angle-angle-side congruent to angle-angle-side ROFL. More useful, though, would be "sprintf()" which puts the formatted text into a string.
I looked into one of the JavaScript examples on Github but it could get seriously complicated, and it boils down to the use of the "built-in" Date function. That function is probably overriden. Otherwise the function to count milliseconds is implemented, while the one that counts seconds depends on that, then the one that counts minutes relies on the one that counts seconds, and so on. Actually I didn't look into source code of many of the functions.
Posts: 439
Threads: 17
Joined: Apr 2022
Reputation:
21
03-01-2023, 04:31 PM
(This post was last modified: 03-01-2023, 04:41 PM by SpriggsySpriggs.)
(03-01-2023, 04:16 PM)mnrvovrfc Wrote: (03-01-2023, 02:40 PM)Balderdash Wrote: SYSTEMTIME (minwinbase.h) - Win32 apps | Microsoft Learn
Simple conversion of the small sample at the bottom of that page:
(code)
Clever use of "printf()" in this one! Although I would define like 20 more examples for combinations like string, string, integer... makes me think of trig class: angle-angle-side congruent to angle-angle-side ROFL. More useful, though, would be "sprintf()" which puts the formatted text into a string.
I looked into one of the JavaScript examples on Github but it could get seriously complicated, and it boils down to the use of the "built-in" Date function. That function is probably overriden. Otherwise the function to count milliseconds is implemented, while the one that counts seconds depends on that, then the one that counts minutes relies on the one that counts seconds, and so on. Actually I didn't look into source code of many of the functions. @mnrvovrfc
I've used printf a lot in QB64. It works great. sprintf also works well. Even the wide-string versions work well.
Ask me about Windows API and maybe some Linux stuff
Posts: 529
Threads: 67
Joined: Apr 2022
Reputation:
11
(03-01-2023, 09:58 AM)SMcNeill Wrote: You can get an UNIX timestamp from my posts here: https://staging.qb64phoenix.com/showthread.php?tid=65
From it, it's easy enough to turn various dates into timestamps and then subtract them to see the difference in number of days between them and such.
I love how simple that is, and can be used for so many other things.
One question - I see it used 64-bit integers, this means it would be immune to the problem of UNIX dates not working past the year 2038?
Posts: 714
Threads: 36
Joined: May 2022
Reputation:
13
03-01-2023, 06:31 PM
(This post was last modified: 03-01-2023, 06:32 PM by Kernelpanic.)
Quote:Years might be tricky with leap years...
The determination of leap years could be inserted.
Code: (Select All) 'Bestimmung von Schaltjahren - 1. Maerz 2023
Option _Explicit
Dim As Integer jahr, jahrAktuell
'Aktuell Jahreszahl ermitteln und zuweisen
jahrAktuell = Val(Right$(Date$, 4))
Locate 2, 2
Print "Zeigt ob ein Jahr ein Schaltjahr ist"
Locate 3, 2
Print "===================================="
Locate 5, 2
Input "Geben Sie das Jahr ein: ", jahr
Locate 7, 2
If (jahr Mod 4 = 0 And jahr Mod 100 <> 0) Or (jahr Mod 4 = 0 And jahr Mod 100 = 0 And jahr Mod 400 = 0) Then
If jahr < jahrAktuell Then
'Was, is a leap year
Beep: Print Using "#### war ein Schaltjahr!"; jahr
Else
Beep: Print Using "#### ist ein Schaltjahr!"; jahr
End If
Else
If jahr < jahrAktuell Then
Print Using "#### war kein Schaltjahr!"; jahr
Else
Print Using "#### ist kein Schaltjahr!"; jahr
End If
End If
End
Posts: 593
Threads: 44
Joined: Apr 2022
Reputation:
43
(03-01-2023, 06:31 PM)Kernelpanic Wrote: Quote:Years might be tricky with leap years...
The determination of leap years could be inserted.
Code: (Select All) 'Bestimmung von Schaltjahren - 1. Maerz 2023
Option _Explicit
Dim As Integer jahr, jahrAktuell
'Aktuell Jahreszahl ermitteln und zuweisen
jahrAktuell = Val(Right$(Date$, 4))
Locate 2, 2
Print "Zeigt ob ein Jahr ein Schaltjahr ist"
Locate 3, 2
Print "===================================="
Locate 5, 2
Input "Geben Sie das Jahr ein: ", jahr
Locate 7, 2
If (jahr Mod 4 = 0 And jahr Mod 100 <> 0) Or (jahr Mod 4 = 0 And jahr Mod 100 = 0 And jahr Mod 400 = 0) Then
If jahr < jahrAktuell Then
'Was, is a leap year
Beep: Print Using "#### war ein Schaltjahr!"; jahr
Else
Beep: Print Using "#### ist ein Schaltjahr!"; jahr
End If
Else
If jahr < jahrAktuell Then
Print Using "#### war kein Schaltjahr!"; jahr
Else
Print Using "#### ist kein Schaltjahr!"; jahr
End If
End If
End
Yes, as I recall many of the date functions run on a 400 and 100 year cycle such as leap years and the Easter calculation.
Software and cathedrals are much the same — first we build them, then we pray.
QB64 Tutorial
Posts: 529
Threads: 67
Joined: Apr 2022
Reputation:
11
(03-01-2023, 06:55 PM)TerryRitchie Wrote: (03-01-2023, 06:31 PM)Kernelpanic Wrote: Quote:Years might be tricky with leap years...
The determination of leap years could be inserted.
Code: (Select All) 'Bestimmung von Schaltjahren - 1. Maerz 2023
Option _Explicit
Dim As Integer jahr, jahrAktuell
'Aktuell Jahreszahl ermitteln und zuweisen
jahrAktuell = Val(Right$(Date$, 4))
Locate 2, 2
Print "Zeigt ob ein Jahr ein Schaltjahr ist"
Locate 3, 2
Print "===================================="
Locate 5, 2
Input "Geben Sie das Jahr ein: ", jahr
Locate 7, 2
If (jahr Mod 4 = 0 And jahr Mod 100 <> 0) Or (jahr Mod 4 = 0 And jahr Mod 100 = 0 And jahr Mod 400 = 0) Then
If jahr < jahrAktuell Then
'Was, is a leap year
Beep: Print Using "#### war ein Schaltjahr!"; jahr
Else
Beep: Print Using "#### ist ein Schaltjahr!"; jahr
End If
Else
If jahr < jahrAktuell Then
Print Using "#### war kein Schaltjahr!"; jahr
Else
Print Using "#### ist kein Schaltjahr!"; jahr
End If
End If
End
Yes, as I recall many of the date functions run on a 400 and 100 year cycle such as leap years and the Easter calculation.
I think if the tricky stuff like this can be identified then the logic can be added to handle it.
Heck, if we simply hardcode the leap years upto the next 200 years then we're good to go right? LoL
(Although we probably need to put in the info for past years as well, but it's doable.)
Just saying...
Posts: 1,510
Threads: 53
Joined: Jul 2022
Reputation:
47
03-01-2023, 10:11 PM
(This post was last modified: 03-01-2023, 10:21 PM by mnrvovrfc.)
(03-01-2023, 05:29 PM)madscijr Wrote: One question - I see it used 64-bit integers, this means it would be immune to the problem of UNIX dates not working past the year 2038?
Might have to take away from this result, but I got 2924712086.77536 years!
Code: (Select All) $CONSOLE:ONLY
dim n as _integer64, r as double
' maximum positive value of signed 64-bit
n = &H7FFFFFFFFFFFFFFF
' do milliseconds
r = n / 6000
' do minutes
r = r / 60
' do hours
r = r / 24
' do years
r = r / 365
print r
EDIT: maybe this program is not accurate, but we are future-proof for our generation and for the generation just becoming adults now. At least on 64-bit MacOS, Linux and "what"BSD there should be no such limit. I don't know the technical workings of "btrfs", "ext4", "zfs" and other such file systems but they use 64-bit addressing for "inodes" and stuff like that.
EDIT #2: It shouldn't be a problem with 64-bit representation of time then:
https://en.wikipedia.org/wiki/Unix_time#...able_times
https://en.wikipedia.org/wiki/Year_2038_problem
Posts: 1,507
Threads: 160
Joined: Apr 2022
Reputation:
116
Posts: 2,700
Threads: 124
Joined: Apr 2022
Reputation:
134
(03-02-2023, 02:23 AM)SMcNeill Wrote: Don't you have everything you need here? https://staging.qb64phoenix.com/showthre...65#pid4565
Ha I was going to post that LeapYear code but I see that and the kitchen sink in there!
b = b + ...
|