Date format: Difference between revisions

Added solution for Action!
(Added solution for Action!)
Line 488:
write / lv_date.
</lang>
 
=={{header|Action!}}==
<lang Action!>TYPE Date=[
INT year
BYTE month
BYTE day]
 
CARD ARRAY DayOfWeeks(7)
CARD ARRAY Months(12)
 
PROC Init()
DayOfWeeks(0)="Sunday" DayOfWeeks(1)="Monday"
DayOfWeeks(2)="Tuesday" DayOfWeeks(3)="Wednesday"
DayOfWeeks(4)="Thursday" DayOfWeeks(5)="Friday"
DayOfWeeks(6)="Saturday"
Months(0)="January" Months(1)="February"
Months(2)="March" Months(3)="April"
Months(4)="May" Months(5)="June"
Months(6)="July" Months(7)="August"
Months(8)="September" Months(9)="October"
Months(10)="November" Months(11)="December"
RETURN
 
;https://en.wikipedia.org/wiki/Determination_of_the_day_of_the_week#Sakamoto.27s_methods
BYTE FUNC DayOfWeek(Date POINTER d) ;1<=m<=12, y>1752
BYTE ARRAY t=[0 3 2 5 0 3 5 1 4 6 2 4]
BYTE res
INT y
 
y=d.year
IF d.month<3 THEN
y==-1
FI
res=(y+y/4-y/100+y/400+t(d.month-1)+d.day) MOD 7
RETURN (res)
 
PROC PrintB2(BYTE x)
IF x<10 THEN
Put('0)
FI
PrintB(x)
RETURN
 
PROC PrintDateShort(Date POINTER d)
PrintI(d.year) Put('-)
PrintB2(d.month) Put('-)
PrintB2(d.day)
RETURN
 
PROC PrintDateLong(Date POINTER d)
BYTE wd
 
wd=DayOfWeek(d)
Print(DayOfWeeks(wd)) Print(", ")
Print(Months(d.month-1)) Put(' )
PrintB(d.day) Print(", ")
PrintI(d.year)
RETURN
 
PROC Main()
Date d
 
Init()
 
;There is no function to get the current date
;on Atari 8-bit computer
d.year=2021 d.month=9 d.day=1
 
PrintDateShort(d) PutE()
PrintDateLong(d) PutE()
RETURN</lang>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Date_format.png Screenshot from Atari 8-bit computer]
<pre>
2021-09-01
Wednesday, September 1, 2021
</pre>
 
=={{header|Ada}}==
Anonymous user