尝试使用变量 julian 日期和年份的最后一位重命名文件
Trying to rename a file using variable julian date and last digit of year
我正在尝试像这样重命名文件:
idYDDD.apl
在哪里:
id 是一个字符串 id,它是不变的,不用担心。
Y 是当前年份的最后一位
DDD 是儒略日期,而不是儒略格式的真正儒略日期。 (1 月 1 日 + 天)
我在这里找到了一个批处理文件,它可以帮助我进行 Julian 日期转换。但我正试图从年份中提取个位数。
这就是我试图获取个位数的方式:
set digit=%DATE:~12,1%
我一直收到错误
"Invalid number. Numerical constants either decimal, hexadecimal or
octal."
我有几个文件,DATETOJULIAN.bat
和 SendAPL.BAT
Date to julian 正在转换日期,SendAPL.Bat 正在重命名并在复制后通过 FTP 发送文件。以下是 Julian 转换:
REM CONVERT DATE TO JULIAN DAY NUMBER
Echo %Date%
REM GET MONTH, DAY, YEAR VALUES
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%1") DO SET MM=%%A& SET DD=%%B& SET YY=%%C
REM ELIMINATE LEFT ZEROS
SET /A DD=10%DD% %% 100, MM=10%MM% %% 100
REM CALCULATE JULIAN DAY NUMBER
IF %MM% LSS 3 SET /A MM+=12, YY-=1
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524
下面是发送 APL:
@echo off
set digit=%DATE:~12,1%
call c:\wic\DATETOJULIAN.BAT %DATE%
call c:\wic\ip.bat
copy c:\wic\download\*04.apl c:\wic\archive\%DAY%_04.apl
copy c:\wic\download\*04.apl c:\wic\download\KY%digit%%JDN%.APL
Pause
ftp -s:C:\wic\sendapl.ftp %IP%
del c:\wic\download\*04.APL
您似乎已经找到了获取真实儒略日数的批处理文件。正如它在 stack exchange 上的 julian 标签的描述中所说,Julian 天数是自公元前 4714 年 11 月 24 日中午以来的整日数(整数),在公历,通用时间中。如果您以您期望的格式给它一个日期,您的文件 DATETOJULIAN.BAT 就会这样做;例如,现在是 2015 年 6 月 25 日晚上 7 点。您输入 6/25/2015 作为参数,它给出的 JDN = 2,457,199 是正确的。但是您似乎想要一年中的某一天,即 176。那不是儒略日期,而是序数日期。
解决方法是调用DATETOJULIAN.BAT两次。首先,找到你想要的前一年12月31日的JDN,命名为JDNDEC31。然后找到你想要的日期的JDN。然后找到序号日期,JDN-JDNDEC31.
如果其他人阅读或维护您的代码,您应该证明您没有计算真正的儒略日数,因为您没有考虑到儒略日数始终使用格林威治时间这一事实,并且儒略日从中午开始,而不是午夜。如果您想要一个使用本地时间并从午夜开始的类似日期,请使用 Lilian 日期,它有一篇关于它的维基百科文章。如果您的文件时间是以格林威治时间报告的,并且您想要一个从午夜开始的日期,请使用修改后的儒略日期,维基百科关于儒略日的文章中对此进行了描述。
我正在尝试像这样重命名文件:
idYDDD.apl
在哪里: id 是一个字符串 id,它是不变的,不用担心。 Y 是当前年份的最后一位 DDD 是儒略日期,而不是儒略格式的真正儒略日期。 (1 月 1 日 + 天)
我在这里找到了一个批处理文件,它可以帮助我进行 Julian 日期转换。但我正试图从年份中提取个位数。
这就是我试图获取个位数的方式:
set digit=%DATE:~12,1%
我一直收到错误
"Invalid number. Numerical constants either decimal, hexadecimal or octal."
我有几个文件,DATETOJULIAN.bat 和 SendAPL.BAT
Date to julian 正在转换日期,SendAPL.Bat 正在重命名并在复制后通过 FTP 发送文件。以下是 Julian 转换:
REM CONVERT DATE TO JULIAN DAY NUMBER
Echo %Date%
REM GET MONTH, DAY, YEAR VALUES
FOR /F "TOKENS=1-3 DELIMS=/" %%A IN ("%1") DO SET MM=%%A& SET DD=%%B& SET YY=%%C
REM ELIMINATE LEFT ZEROS
SET /A DD=10%DD% %% 100, MM=10%MM% %% 100
REM CALCULATE JULIAN DAY NUMBER
IF %MM% LSS 3 SET /A MM+=12, YY-=1
SET /A A=YY/100, B=A/4, C=2-A+B, E=36525*(YY+4716)/100, F=306*(MM+1)/10, JDN=C+DD+E+F-1524
下面是发送 APL:
@echo off
set digit=%DATE:~12,1%
call c:\wic\DATETOJULIAN.BAT %DATE%
call c:\wic\ip.bat
copy c:\wic\download\*04.apl c:\wic\archive\%DAY%_04.apl
copy c:\wic\download\*04.apl c:\wic\download\KY%digit%%JDN%.APL
Pause
ftp -s:C:\wic\sendapl.ftp %IP%
del c:\wic\download\*04.APL
您似乎已经找到了获取真实儒略日数的批处理文件。正如它在 stack exchange 上的 julian 标签的描述中所说,Julian 天数是自公元前 4714 年 11 月 24 日中午以来的整日数(整数),在公历,通用时间中。如果您以您期望的格式给它一个日期,您的文件 DATETOJULIAN.BAT 就会这样做;例如,现在是 2015 年 6 月 25 日晚上 7 点。您输入 6/25/2015 作为参数,它给出的 JDN = 2,457,199 是正确的。但是您似乎想要一年中的某一天,即 176。那不是儒略日期,而是序数日期。
解决方法是调用DATETOJULIAN.BAT两次。首先,找到你想要的前一年12月31日的JDN,命名为JDNDEC31。然后找到你想要的日期的JDN。然后找到序号日期,JDN-JDNDEC31.
如果其他人阅读或维护您的代码,您应该证明您没有计算真正的儒略日数,因为您没有考虑到儒略日数始终使用格林威治时间这一事实,并且儒略日从中午开始,而不是午夜。如果您想要一个使用本地时间并从午夜开始的类似日期,请使用 Lilian 日期,它有一篇关于它的维基百科文章。如果您的文件时间是以格林威治时间报告的,并且您想要一个从午夜开始的日期,请使用修改后的儒略日期,维基百科关于儒略日的文章中对此进行了描述。