RosettaCodeData/Task/Discordian-date/Batch-File/discordian-date.bat
2016-12-05 22:15:40 +01:00

177 lines
4.5 KiB
Batchfile

@echo off
goto Parse
Discordian Date Converter:
Usage:
ddate
ddate /v
ddate /d isoDate
ddate /v /d isoDate
:Parse
shift
if "%0"=="" goto Prologue
if "%0"=="/v" set Verbose=1
if "%0"=="/d" set dateToTest=%1
if "%0"=="/d" shift
goto Parse
:Prologue
if "%dateToTest%"=="" set dateToTest=%date%
for %%a in (GYear GMonth GDay GMonthName GWeekday GDayThisYear) do set %%a=fnord
for %%a in (DYear DMonth DDay DMonthName DWeekday) do set %%a=MUNG
goto Start
:Start
for /f "tokens=1,2,3 delims=/:;-. " %%a in ('echo %dateToTest%') do (
set GYear=%%a
set GMonth=%%b
set GDay=%%c
)
goto GMonthName
:GMonthName
if %GMonth% EQU 1 set GMonthName=January
if %GMonth% EQU 2 set GMonthName=February
if %GMonth% EQU 3 set GMonthName=March
if %GMonth% EQU 4 set GMonthName=April
if %GMonth% EQU 5 set GMonthName=May
if %GMonth% EQU 6 set GMonthName=June
if %GMonth% EQU 7 set GMonthName=July
if %GMonth% EQU 8 set GMonthName=August
if %GMonth% EQU 9 set GMonthName=September
if %GMonth% EQU 10 set GMonthName=October
if %GMonth% EQU 11 set GMonthName=November
if %GMonth% EQU 12 set GMonthName=December
goto GLeap
:GLeap
set /a CommonYear=GYear %% 4
set /a CommonCent=GYear %% 100
set /a CommonQuad=GYear %% 400
set GLeap=0
if %CommonYear% EQU 0 set GLeap=1
if %CommonCent% EQU 0 set GLeap=0
if %CommonQuad% EQU 0 set GLeap=1
goto GDayThisYear
:GDayThisYear
set GDayThisYear=%GDay%
if %GMonth% GTR 11 set /a GDayThisYear=%GDayThisYear%+30
if %GMonth% GTR 10 set /a GDayThisYear=%GDayThisYear%+31
if %GMonth% GTR 9 set /a GDayThisYear=%GDayThisYear%+30
if %GMonth% GTR 8 set /a GDayThisYear=%GDayThisYear%+31
if %GMonth% GTR 7 set /a GDayThisYear=%GDayThisYear%+31
if %GMonth% GTR 6 set /a GDayThisYear=%GDayThisYear%+30
if %GMonth% GTR 5 set /a GDayThisYear=%GDayThisYear%+31
if %GMonth% GTR 4 set /a GDayThisYear=%GDayThisYear%+30
if %GMonth% GTR 3 set /a GDayThisYear=%GDayThisYear%+31
if %GMonth% GTR 2 if %GLeap% EQU 1 set /a GDayThisYear=%GDayThisYear%+29
if %GMonth% GTR 2 if %GLeap% EQU 0 set /a GDayThisYear=%GDayThisYear%+28
if %GMonth% GTR 1 set /a GDayThisYear=%GDayThisYear%+31
goto DYear
:DYear
set /a DYear=GYear+1166
goto DMonth
:DMonth
set DMonth=1
set DDay=%GDayThisYear%
if %DDay% GTR 73 (
set /a DDay=%DDay%-73
set /a DMonth=%DMonth%+1
)
if %DDay% GTR 73 (
set /a DDay=%DDay%-73
set /a DMonth=%DMonth%+1
)
if %DDay% GTR 73 (
set /a DDay=%DDay%-73
set /a DMonth=%DMonth%+1
)
if %DDay% GTR 73 (
set /a DDay=%DDay%-73
set /a DMonth=%DMonth%+1
)
goto DDay
:DDay
if %GLeap% EQU 1 (
if %GDayThisYear% GEQ 61 (
set /a DDay=%DDay%-1
)
)
if %DDay% EQU 0 (
set /a DDay=73
set /a DMonth=%DMonth%-1
)
goto DMonthName
:DMonthName
if %DMonth% EQU 1 set DMonthName=Chaos
if %DMonth% EQU 2 set DMonthName=Discord
if %DMonth% EQU 3 set DMonthName=Confusion
if %DMonth% EQU 4 set DMonthName=Bureaucracy
if %DMonth% EQU 5 set DMonthName=Aftermath
goto DTib
:DTib
set DTib=0
if %GDayThisYear% EQU 60 if %GLeap% EQU 1 set DTib=1
if %GLeap% EQU 1 if %GDayThisYear% GTR 60 set /a GDayThisYear=%GDayThisYear%-1
set DWeekday=%GDayThisYear%
goto DWeekday
:DWeekday
if %DWeekday% LEQ 5 goto _DWeekday
set /a DWeekday=%DWeekday%-5
goto DWeekday
:_DWeekday
if %DWeekday% EQU 1 set DWeekday=Sweetmorn
if %DWeekday% EQU 2 set DWeekday=Boomtime
if %DWeekday% EQU 3 set DWeekday=Pungenday
if %DWeekday% EQU 4 set DWeekday=Prickle-Prickle
if %DWeekday% EQU 5 set DWeekday=Setting Orange
goto GWeekday
:GWeekday
goto GEnding
:GEnding
set GEnding=th
for %%a in (1 21 31) do if %GDay% EQU %%a set GEnding=st
for %%a in (2 22) do if %GDay% EQU %%a set GEnding=nd
for %%a in (3 23) do if %GDay% EQU %%a set GEnding=rd
goto DEnding
:DEnding
set DEnding=th
for %%a in (1 21 31 41 51 61 71) do if %Dday% EQU %%a set DEnding=st
for %%a in (2 22 32 42 52 62 72) do if %Dday% EQU %%a set DEnding=nd
for %%a in (3 23 33 43 53 63 73) do if %Dday% EQU %%a set DEnding=rd
goto Display
:Display
if "%Verbose%"=="1" goto Display2
echo.
if %DTib% EQU 1 (
echo St. Tib's Day, %DYear%
) else echo %DWeekday%, %DMonthName% %DDay%%DEnding%, %DYear%
goto Epilogue
:Display2
echo.
echo Gregorian: %GMonthName% %GDay%%GEnding%, %GYear%
if %DTib% EQU 1 (
echo Discordian: St. Tib's Day, %DYear%
) else echo Discordian: %DWeekday%, %DMonthName% %DDay%%DEnding%, %DYear%
goto Epilogue
:Epilogue
set Verbose=
set dateToTest=
echo.
:End