Posts: 369
Threads: 71
Joined: Jul 2022
Reputation:
14
10-04-2023, 05:31 AM
(This post was last modified: 10-04-2023, 05:35 AM by eoredson.)
I noticed the Date$ function returns the current date, but there is no:
Code: (Select All) Print "Date";
Input D$
Date$ = D$
why would that be!?
I would like to be able to set the system date.
Erik.
Posts: 1,586
Threads: 59
Joined: Jul 2022
Reputation:
52
10-04-2023, 07:11 AM
(This post was last modified: 10-04-2023, 07:13 AM by mnrvovrfc.)
(10-04-2023, 05:31 AM)eoredson Wrote: I would like to be able to set the system date.
It's not allowed on Linux, nor set the `TIME$` from QB64. It would require temporary superuser permission.
I guess the command versions were a trick that worked very well on 16-bit computers running GW-BASIC or BASICA. But it became dangerous to allow the user to change the date and time from a program. Even though Windows10 and earlier never resisted the user setting the time completely wrong. Probably Windows11 has become line Linux. Some operating systems don't handle time zone correctly. They don't allow NTP sync which is otherwise a solution for improperly setting the time according to time zone related to UTC. On one distro I have to run a separate program for NTP sync because, for some reason, the GUI system settings for that operating system keeps the whole dialog greyed out. I cannot even manually set the date and time.
I noticed something else, LOL you're trying to use `INPUT` to obtain a date! You will have to check the input rigidly. There are a wide variety of date formats. What if the user wants to type in a day of the week, but it's wrong for the given date? "Tuesday October 4 2023"? It could be dangerous to accept that. (Today is Wednesday.) If you look at the help for `strftime()` function in C, you would notice there are mind-boggling combinations of displaying items from the date, time or time zone.
Posts: 733
Threads: 30
Joined: Apr 2022
Reputation:
43
If you want to set the system date, I recommend clicking the date in the bottom right corner of your monitor and changing it through the popup. In Control Panel, this requires administrator privileges. In Windows' new Settings menu, this can be done without those rights and does the exact same thing. Changing the date and time through some program would be a bad idea, as mnrvovrfc (is that just some random letter combination?) said.
Tread on those who tread on you
Posts: 2,696
Threads: 327
Joined: Apr 2022
Reputation:
217
10-04-2023, 11:27 AM
(This post was last modified: 10-04-2023, 11:28 AM by SMcNeill.)
(10-04-2023, 11:19 AM)SpriggsySpriggs Wrote: If you want to set the system date, I recommend clicking the date in the bottom right corner of your monitor and changing it through the popup. In Control Panel, this requires administrator privileges. In Windows' new Settings menu, this can be done without those rights and does the exact same thing. Changing the date and time through some program would be a bad idea, as mnrvovrfc (is that just some random letter combination?) said.
Isn't it: men are vov-riffic? (mn r vov rfc)
The vov is symbolic... leave your elbows down, raise your hands up and out to the side, and make a piteous face like you're surrendering or clueless.
At least, that's the interpretation I take away from it. Did I win? Was I right?? Men are shrug-riffic?
Posts: 345
Threads: 24
Joined: Jul 2022
Reputation:
20
@eoredson
the strange matter is that parser lets you type "Date$ = "something" OR "Date$= MyString$" without a warning or an error alert!
As Wiki shows Date$ is a function that returns a string value... it cannot be used as a string variable to initialize!
Date$ wiki
Posts: 3,966
Threads: 176
Joined: Apr 2022
Reputation:
219
10-04-2023, 05:34 PM
(This post was last modified: 10-04-2023, 05:47 PM by bplus.)
(10-04-2023, 05:04 PM)TempodiBasic Wrote: @eoredson
the strange matter is that parser lets you type "Date$ = "something" OR "Date$= MyString$" without a warning or an error alert!
As Wiki shows Date$ is a function that returns a string value... it cannot be used as a string variable to initialize!
Date$ wiki
He's stuck in the past and wants to do all you coulda done with old QB. You use to be able to set date as he has shown.
Hey Eric does it work from a .bat file?
b = b + ...
Posts: 207
Threads: 13
Joined: Apr 2022
Reputation:
52
(10-04-2023, 05:34 PM)bplus Wrote: (10-04-2023, 05:04 PM)TempodiBasic Wrote: @eoredson
the strange matter is that parser lets you type "Date$ = "something" OR "Date$= MyString$" without a warning or an error alert!
As Wiki shows Date$ is a function that returns a string value... it cannot be used as a string variable to initialize!
Date$ wiki
He's stuck in the past and wants to do all you coulda done with old QB. You use to be able to set date as he has shown.
Hey Eric does it work from a .bat file?
Also this Unsupported keywords Wiki page states alraedy in the first few lines why it don't give an error. Clear advantage for people who are willing to look around by themself instead of complaining over and over.
Posts: 1,002
Threads: 50
Joined: May 2022
Reputation:
27
Quote:Also this Unsupported keywords Wiki page states alraedy in the first few lines why it don't give an error.
DATE$ (statement) The statement is not supported.
And I was wondering why this doesn't work, i.e. the date isn't changed.
Code: (Select All)
Dim As String heutigesDatum
Print "Heute ist "; Date$
heutigesDatum = Date$
Date$ = "11-21-1992"
Print Date$
Date$ = heutigesDatum
Posts: 369
Threads: 71
Joined: Jul 2022
Reputation:
14
10-04-2023, 10:24 PM
(This post was last modified: 10-05-2023, 02:46 AM by eoredson.)
I tried the following code with no result:
Code: (Select All) ' some code to attempt to change the system date.
' returns error:
' a required privilege is not held by the client.
DefLng A-Z
Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type
Declare Dynamic Library "kernel32"
Function GetLocalTime& (lpSystemTime As SYSTEMTIME)
Function SetLocalTime& (lpSystemTime As SYSTEMTIME)
Function GetSystemTime& (lpSystemTime As SYSTEMTIME)
Function SetSystemTime& (lpSystemTime As SYSTEMTIME)
Function GetLastError& ()
Function FormatMessageA& (ByVal f As Long, f$, Byval e As Long, Byval d As Long, g$, Byval s As Long, h$)
End Declare
Dim Shared SysTime As SYSTEMTIME
Dim Shared ErrorBuffer As String * 260
Print "Current date: "; Date$
Print "Enter date(mm-dd-yyyy)";
Input z$
z$ = LTrim$(RTrim$(z$))
If Len(z$) Then
z = ValidDate(z$)
If z Then
' mm-dd-yyyy
x = GetLocalTime(SysTime)
SysTime.wMonth = Int(Val(Left$(z$, 2)))
SysTime.wDay = Int(Val(Mid$(z$, 4, 2)))
SysTime.wYear = Int(Val(Right$(z$, 4)))
x = SetLocalTime(SysTime)
If x = 0 Then
Print "Error Date reset: "; z$
Print DisplayWinError$(x)
Else
Print "Date reset to: "; z$
End If
Else
Print "Invalid date."
End If
End If
End
Function ValidDate (Var$)
' mm-dd-yyyy
Var$ = RTrim$(Var$)
If Len(Var$) <> 10 Then
ValidDate = False
Exit Function
End If
For Var = 1 To 10
V$ = Mid$(Var$, Var, 1)
Select Case Var
Case 1, 2, 4, 5, 7, 8, 9, 10
If V$ >= "0" And V$ <= "9" Then
Eat$ = ""
Else
ValidDate = False
Exit Function
End If
Case Else
If V$ <> "-" Then
ValidDate = False
Exit Function
End If
End Select
Next
M = Int(Val(Mid$(Var$, 1, 2)))
D = Int(Val(Mid$(Var$, 4, 2)))
Y = Int(Val(Mid$(Var$, 7, 4)))
If M >= 1 And M <= 12 Then
If D >= 1 And D <= 31 Then
If Y >= 1980 And Y <= 2079 Then
L = 0
If Y / 4 = Y \ 4 Then
L = -1
End If
If Y / 100 = Y \ 100 Then
L = 0
End If
If Y / 400 = Y \ 400 Then
L = -1
End If
Select Case M
Case 1, 3, 5, 7, 8, 10, 12
If D <= 31 Then
ValidDate = -1
Exit Function
End If
Case 4, 6, 9, 11
If D <= 30 Then
ValidDate = -1
Exit Function
End If
Case 2
If L Then
If D <= 29 Then
ValidDate = -1
Exit Function
End If
End If
If D <= 28 Then
ValidDate = -1
Exit Function
End If
End Select
End If
End If
End If
ValidDate = 0
End Function
' display windows error message
Function DisplayWinError$ (x)
' define error message value
v& = GetLastError
' call windows error message routine
x& = FormatMessageA&(&H1200, "", v&, 0, ErrorBuffer$, 260, "")
If x& Then
DisplayWinError$ = Left$(ErrorBuffer$, x& - 2)
Else
DisplayWinError$ = "Unknown error 0x" + Hex$(v&) + "."
End If
x = -1
End Function
Posts: 2,696
Threads: 327
Joined: Apr 2022
Reputation:
217
Did you try "Run as admin"? Windows really doesn't want folks to do much tinkering on date and time anymore, as they like to sync things all nice and neat via the web. I honestly can't think of the last time that I've ever had to manually set the date and time on any of my PCs.
|