[前の記事]« 「追加の変数名」が割り当てられない
[次の記事]長さが異なる新しいファイル名の生成方法 »

関連オンラインソフト配布サイト:
Vector>ダウンロード(top) |>MS-DOSまたは汎用 | >WindowsVista/XP/2000/NT

▲カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

ロケール情報が不統一な複数のPCでYYYYMMDD形式の日付を取得したい

411.
ロケール対応に対応したYYYYMMDD形式の日付を取得したい
2005年04月29日(金) 14時15分
初心者
●DOS/Windowsのバージョン↓
Microsoft Windows XP [Version 5.1.2600]

YYYYMMDD形式で日付を取得したいのですが、
%DATE%から文字を切り出して、取得すればいいと
思っていますが、
%DATE%の形式がマシンのロケールによってばらばら
なので取得できません。
このような場合どうすればいいのでしょうか。
Windowsで日付するには、ロケールによる日付の形式を
きめうちにしておかないとできないとうことでしょうか?
YYYY/MM/DD形式という風にきまっているなら、できますが、
環境によっては 曜日 dd/mm/yyyyなどの場合もあり
困っています。
416.
Re:ロケール対応に対応したYYYYMMDD形式の日付を取得したい
2005年04月30日(土) 00時50分
otn
>●DOS/Windowsのバージョン↓
>Microsoft Windows XP [Version 5.1.2600]

>YYYYMMDD形式で日付を取得したいのですが、
>%DATE%から文字を切り出して、取得すればいいと
>思っていますが、
>%DATE%の形式がマシンのロケールによってばらばら
>なので取得できません。
>このような場合どうすればいいのでしょうか。
>Windowsで日付するには、ロケールによる日付の形式を
>きめうちにしておかないとできないとうことでしょうか?
>YYYY/MM/DD形式という風にきまっているなら、できますが、
>環境によっては 曜日 dd/mm/yyyyなどの場合もあり
>困っています。

XPであれば、
for /f "skip=4 tokens=2*" %%A in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set FMT=%%B
で書式が取得できるので、パターンが列挙できればこれを使ってIF文で条件分岐すれば良いと思います。

あとは、こういう手もあります。FMTは上記。delims= には必要な記号を適宜追加してください。

set YYYY=&set YY=&set MM=&set M=&set DD=&set D=&set DDD=
for /f "tokens=1-4 delims=/-.() " %%A in ("%FMT%") do (
 for /f "tokens=1-4 delims=/-.() " %%a in ("%DATE%") do (
  set %%A=%%a&set %%B=%%b&set %%C=%%c&set %%D=%%d
))
if not "%YY%"=="" set YYYY=20%YY%
if not "%M%"=="" set MM=0%M%
set MM=%MM:~-2%
if not "%D%"=="" set DD=0%D%
set DD=%DD:~-2%
set YYYYMMDD=%YYYY%%MM%%DD%

解説としては、set %%A=%%a 等によって、FMT の中に書いてある、yyyy や M や d 等の変数に対応する位置の DATE の値がセットされる。FMTの内容により、YYYY と YY どちらか、MM と M どちらか、DD と D どちらかに値がセットされるので後半で、ifとsetで書式を整えます。

(これはwikiに書いておこう…独り言)
423.
Re2:ロケール対応に対応したYYYYMMDD形式の日付を取得したい
2005年05月04日(水) 12時11分
初心者
>>●DOS/Windowsのバージョン↓
>>Microsoft Windows XP [Version 5.1.2600]
>>
>>YYYYMMDD形式で日付を取得したいのですが、
>>%DATE%から文字を切り出して、取得すればいいと
>>思っていますが、
>>%DATE%の形式がマシンのロケールによってばらばら
>>なので取得できません。
>>このような場合どうすればいいのでしょうか。
>>Windowsで日付するには、ロケールによる日付の形式を
>>きめうちにしておかないとできないとうことでしょうか?
>>YYYY/MM/DD形式という風にきまっているなら、できますが、
>>環境によっては 曜日 dd/mm/yyyyなどの場合もあり
>>困っています。

>XPであれば、
>for /f "skip=4 tokens=2*" %%A in ('reg query "HKCU\Control Panel\International" /v sShortDate') do set FMT=%%B
>で書式が取得できるので、パターンが列挙できればこれを使ってIF文で条件分岐すれば良いと思います。

>あとは、こういう手もあります。FMTは上記。delims= には必要な記号を適宜追加してください。

>set YYYY=&set YY=&set MM=&set M=&set DD=&set D=&set DDD=
>for /f "tokens=1-4 delims=/-.() " %%A in ("%FMT%") do (
> for /f "tokens=1-4 delims=/-.() " %%a in ("%DATE%") do (
>  set %%A=%%a&set %%B=%%b&set %%C=%%c&set %%D=%%d
>))
>if not "%YY%"=="" set YYYY=20%YY%
>if not "%M%"=="" set MM=0%M%
>set MM=%MM:~-2%
>if not "%D%"=="" set DD=0%D%
>set DD=%DD:~-2%
>set YYYYMMDD=%YYYY%%MM%%DD%

>解説としては、set %%A=%%a 等によって、FMT の中に書いてある、yyyy や M や d 等の変数に対応する位置の DATE の値がセットされる。FMTの内容により、YYYY と YY どちらか、MM と M どちらか、DD と D どちらかに値がセットされるので後半で、ifとsetで書式を整えます。

>(これはwikiに書いておこう…独り言)


ありがとうございます。
うーん、すごい方法ですね。
424.
Re3:ロケール対応に対応したYYYYMMDD形式の日付を取得したい
2005年05月05日(木) 01時22分
otn
>>set YYYY=&set YY=&set MM=&set M=&set DD=&set D=&set DDD=
>>for /f "tokens=1-4 delims=/-.() " %%A in ("%FMT%") do (
>> for /f "tokens=1-4 delims=/-.() " %%a in ("%DATE%") do (
>>  set %%A=%%a&set %%B=%%b&set %%C=%%c&set %%D=%%d
>>))

echo off しないでテストしてたんで表示にまぎれてエラーを見落としてました。
書式に曜日が無いとトークンが3つなんで最後のset命令がエラーになりますね。
set %%A=%%a&set %%B=%%b&set %%C=%%c&if not "%%D"=="" set %%D=%%d
にしないといけない。
 
 


カテゴリー「DATE,TIME…日付、時刻の取得/利用」索引へ

 

カテゴリー一覧

FPCU/FPCDIY QUICK LINK online
この上の各ジャンル名をクリックすると、下のウィンドウが切り替わります▼


=リンク集のインデックスはこちら=

資料書籍

About

2005年04月29日 01:44に投稿されたエントリーのページです。

ひとつ前の投稿は「「追加の変数名」が割り当てられない」です。

次の投稿は「長さが異なる新しいファイル名の生成方法」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

This site is powered by Six Apart
Movable Type 3.33-ja
このブログについて | 運営:有限会社メディアポート