Я не могу найти оригинальное решение, которое у меня было для этого, но я нашел что-то на сайте Роба Ван Дер Вуде , которое прекрасно справится с этой задачей.
Существует ошибка вфайл, размещенный там, из-за того факта, что SET /A
будет обрабатывать строки, начинающиеся с нуля, как восьмеричные, и это вызывает проблемы, когда даты дня / месяца начинаются с нуля.
Если файлы связанывыше, но измените код процедуры: JDate (строка 157) на:
SET MonthChecker1=%2
SET MonthChecker2=%MonthChecker1:~0,1%
IF %MonthChecker2%==0 (
SET MonthChecker3=%MonthChecker1:~1,1%
) ELSE (
SET MonthChecker3=%MonthChecker1%
)
SET DayChecker1=%3
SET DayChecker2=%DayChecker1:~0,1%
IF %DayChecker2%==0 (
SET DayChecker3=%DayChecker1:~1,1%
) ELSE (
SET DayChecker3=%DayChecker1%
)
SET /A Month1 = ( %MonthChecker3% - 14 ) / 12
SET /A Year1 = %1 + 4800
SET /A JDate = 1461 * ( %Year1% + %Month1% ) / 4 + 367 * ( %MonthChecker3% - 2 -12 * %Month1% ) / 12 - ( 3 * ( ( %Year1% + %Month1% + 100 ) / 100 ) ) / 4 + %DayChecker1% - 32075
FOR %%A IN (Month1 Year1) DO SET %%A=
GOTO:EOF
Это проверено и работает на коробке 2K8R2.Это определенно стоит использовать по сравнению с другими решениями, поскольку у него есть возможность определить, какой формат даты в хост-системе взят из реестра, чего не может найти ни одно другое решение, которое я нашел.