我有一个bat文件,它只生成一个日期
for /f "tokens=2,3,4 delims=/ " %%a in ('date /t') do set CurrYear=%%c
for /f "tokens=2,3,4 delims=/ " %%a in ('date /t') do set CurrMoth=%%a
for /f "tokens=2,3,4 delims=/ " %%a in ('date /t') do set CurrDay=%%b
set bDate =01/%CurrMoth%/%CurrYear%
set eDate=%CurrDay%/%CurrMoth%/%CurrYear%
set /a dayminus = %CurrDay% - 1
echo %dayminus%
pause
echo %dayminus%
给出的答案是6而不是06&这是我的问题。
答案 0 :(得分:0)
(有趣的是,大多数人都想知道如何走另一条道路。)发生这种情况的原因是因为批处理将以0开头的数字视为八进制,然后将它们简化为在打印为整数时丢弃0 。你可以通过将变量视为字符串来解决这个问题。
set /a dayminus=%CurrDay%-1
if %dayminus% lss 10 (
set dayminus=0%dayminus%
)
echo %dayminus%
答案 1 :(得分:0)
如果您的目的是确保将数字保留为零填充到两个位置,您可以使用:
if %dayminus% lss 10 set dayminus=0%dayminus%
但是,您很快就会遇到另一个问题,特别是当您在本月的第一天运行时遇到的问题。但这可能是一个单独问题的问题(或者你可以看看this one)。
如果您打开使用其他工具(Windows附带,就像cmd.exe
那样),那么VBScript可能是最简单的选择。你可以创建一个单行yesterdom.vbs
:
wscript.echo day(date()-1)
然后从你的脚本中调用它:
for /f %%a in ('cscript //nologo yesterdom.vbs') do set dayminus=%%a
如果您不想要维护单行内容的麻烦,您可以在脚本中创建和销毁它,例如:
@echo off
echo wscript.echo day(date()-1) >yesterdom.vbs
for /f %%a in ('cscript //nologo yesterdom.vbs') do set dayminus=%%a
del /q yesterdom.vbs >nul: 2>nul:
echo %dayminus%
答案 2 :(得分:0)
以下是我在示例程序中为您准备的快速解决方法:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_menu_01);
ImageButton button = (ImageButton) findViewById(R.id.my_button);
final Context context = this;
button.setOnClickListener(new View.OnClickListner(){
@Override
public void onClick(View v){
Intent intent = new Intent(context, NewActivity.class);
startActivity(intent);
}
});
}
这将始终为您提供一个两位数的数字,因为当它被写入屏幕时,任何低于10的数字都会在它前面加上0。
答案 3 :(得分:0)
这是一个获得昨天日期的纯文件解决方案;它也适用于当前日期减去不到一个月的任何天数:
@echo off
setlocal EnableDelayedExpansion
rem Create array of days per month; both month and day are 100-based
set i=100
for %%a in (31 28 31 30 31 30 31 31 30 31 30 31) do (
set /A i+=1
set "daysPerMonth[!i!]=1%%a"
)
rem Get today's date parts (from "Dow MM/DD/YYYY" format) - 1 day
for /F "tokens=2-4 delims=/ " %%a in ('date /T') do (
set /A MM=1%%a, DD=1%%b-1, YYYY=%%c, YYYYmod4=YYYY %% 4
)
if %YYYYmod4% equ 0 set "daysPerMonth[102]=129"
rem Adjust date if previous month
if %DD% equ 100 (
set /A MM-=1
if !MM! equ 100 (
set /A MM=112, YYYY-=1
)
set /A DD=daysPerMonth[!MM!]
)
set "dateMinus=%DD:~1%/%MM:~1%/%YYYY%
echo %dateMinus%