June 20th, 2006

getting the current date in a particular format in Windows XP/2003

I needed to get the current date, in the format ‘yyyy-MM-dd’, and use that value multiple times within a batch file.

The command ‘DATE /T’ returns a date like this:
Tue 06/20/2006

But I needed:
2006-06-20

Now, this would have been extraordinarily easy, if I could use 4nt, cygwin, nclip, or any number of other tools. However, my options were limited on the machine that I needed to run this on, as it is a production web application server. So, I had to come up with a way to do this using the tools I had available to me:
- Windows 2003 Server (assumed to be a default installation, or more minimal than that)
- Sybase ASE 12.5.x
- Java

I probably could have just written a simple java application to do this, but where’s the fun in THAT? :)

So, I consulted with my good friend, Jeff Scanlon, as I usually do when I have an interesting tech challenge, and together we came up with this batch file [NOTE: you can download it here, if the code gets too munged with the blogger html/css]:

—— BEGIN BATCH FILE ——-

@echo off
REM generate SQL script to get date in correct format:
echo select ’set my_date=’ + str_replace(convert(char(20),getdate(),102),’.',’-') >%TEMP%\getDate_yyyy-MM-dd.sql
echo go >>%TEMP%\getDate_yyyy-MM-dd.sql

REM run the SQL script to generate a simple, temporary batch file:
isql -U username -P password -i %TEMP%\getDate_yyyy-MM-dd.sql | findstr set >%TEMP%\set_my_date.bat

REM run the temporary batch file, which will set an environment variable, ‘MY_DATE’, to contain the date:
call %TEMP%\set_my_date.bat

REM clean up
del /q %TEMP%\set_my_date.bat
del /q %TEMP%\getDate_yyyy-MM-dd.sql

REM this is where you’d actually put code that uses the date, like:
REM md c:\backup\%MY_DATE%
REM copy c:\mystuff\*.* c:\backup\%MY_DATE%

—— END BATCH FILE ——-

3 Responses to “getting the current date in a particular format in Windows XP/2003”

  1. alex Says:

    (2 lines)

    FOR /F “DELIMS=” %%A IN (’DATE /T’) DO SET CURRENT_DATE=%%A

    SET MY_DATE=%CURRENT_DATE:~10,4%-%CURRENT_DATE:~4,2%-%CURRENT_DATE:~7,2%

    See http://www.robvanderwoude.com/ for more batch goodness.

  2. alex Says:

    (1 line, if DATE is already set by OS.)

    SET MY_DATE=%DATE:~10,4%-%DATE:~4,2%-%DATE:~7,2%

  3. ClintJCL Says:

    damn! Looks like you got 1-upped?

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>