Date.Todayで取得した日付の並び順を変えるには?


さくら  2010-06-02 02:02:27  No: 102400

よろしくお願いします

WindowsXPでVB2008EEを使っておりまして、
Date.Todayで現在の日付(2010/06/01)を取得しますと、06/01/2010で
取得します、これを06/01/2010で取得した後に  01/06/2010のように、
ヨーロッパ形式に直すか、Date.Todayで取得した時に01/06/2010の形式に
したいのですが、どのようにすれば宜しいのでしょうか?

なにとぞご教授のほどよろしくお願いします。


魔界の仮面弁士  2010-06-02 04:58:28  No: 102401

> Date.Todayで現在の日付(2010/06/01)を取得しますと、06/01/2010で
> 取得します、これを06/01/2010で取得した後に  01/06/2010のように、

「Date 型の Today プロパティ」にしても、VB の Today にしても、
そのデータ型は『日付型』です。
http://msdn.microsoft.com/ja-jp/library/system.datetime.today%28VS.80%29.aspx
http://msdn.microsoft.com/ja-jp/library/9z20y6ha%28VS.80%29.aspx

『日付型』の値を、"06/01/2010" や "2010/06/01" などの『文字列』に
変換したいのであれば、どのような書式で出力したいのかを
明示するようにしましょう。

> ヨーロッパ形式に直すか、Date.Todayで取得した時に01/06/2010の形式に
Date.ToString メソッドの引数(あるいは String.Format など)で
書式を指定してください。たとえばこんな感じです。
(月の指定が "mm" ではなく "MM" な点に注意)

Dim dt As Date = Today
Dim s As String = dt.ToString("dd\/MM\/yyyy", System.Globalization.CultureInfo.InvariantCulture)

上記 2 行目の CultureInfo や "\" の指定を忘れないようにしてください。

単純に dt.ToString("dd/MM/yyyy") とすると、2010年6月1日に処理したとしても、
OS の設定等によっては期待していた "01/06/2010" ではなく、
"01-06-2010" (区切り記号が "/" 以外に設定されていた場合)や
"01/06/22" (OSの地域設定が日本の和暦モードになっていた場合)などに
なってしまう可能性があります。

なおヨーロッパの国々は、日→月→年の順であるところが多いですが、
実際には 01/06/2010 形式の記述ばかりではなく、1/6/2010 と書く方が
自然とされる地域もあれば(もちろん01/06/2010でも意味は通じますが)、
区切り記号が / ではなく、01.06.2010 や 1-6-2010 などが
多く使われる地域もあるなど、微妙な差があるそうです。

# 中には、年→月→日 の形式が併用されている地域もあるらしい。


魔界の仮面弁士  2010-06-02 05:02:20  No: 102402

# 書き忘れ。

なお、こちらは VB2-VB6 専用の掲示板です。
http://madia.world.coocan.jp/cgi-bin/VBBBS/wwwlng.cgi

VB2008(VB9) の場合は、お隣の VB.NET 掲示板を利用してください。
http://madia.world.coocan.jp/cgi-bin/vbnet/wwwlng.cgi


さくら  2010-06-02 18:35:38  No: 102403

魔界の仮面弁士さん  解答して頂きありがとうございました。

丁寧な説明で、よく理解出来ました。

またの質問で申し訳ないのですが

2010年6月1日を、教えていただいた方法

Dim dt As Date = Today
Dim s As String = dt.ToString("dd\/MM\/yyyy", System.Globalization.CultureInfo.InvariantCulture)で

01/06/2010に直した後に日付の計算をしたいのですが
Dim d1 As Date = CDate(dt.ToString("dd\/MM\/yyyy",System.Globalization.CultureInfo.InvariantCulture))

Dim dt3 As Object
dt3 = DateAdd("d", 1, d1) 

とか

Dim dt3 As Date
dtbirth = d1.AddDays(1)

で計算しますと結果が01/07/2010になってしまいます
これを02/06/2010にしたいのですが、その方法を教えて
頂けないでしょうか、なにとぞよろしくお願いします。

NET版の掲示板があったのに、間違えてこちらに投稿してしまい失礼しました、次回  別件でお聞きする事があった時は、VB.NET掲示板に致しますので、よろしくお願いします。


YuO  2010-06-02 20:35:09  No: 102404

> Dim d1 As Date = CDate(dt.ToString("dd\/MM\/yyyy",System.Globalization.CultureInfo.InvariantCulture))
これは何がしたいのですか (日付型→文字列型→日付型という変換は理由が一般にない)。
また,文字列を介在させるのは何のためですか。

・実際には入力が文字列であるから
Date.ParseExactメソッドやDate.TryParseExactメソッドを利用して変換する。
MSDN: DateTime.ParseExact メソッド (String, String, IFormatProvider) (System)
http://msdn.microsoft.com/ja-jp/library/w2sa9yss(v=VS.90).aspx
MSDN: DateTime.TryParseExact メソッド (String, String, IFormatProvider, DateTimeStyles, DateTime) (System)
http://msdn.microsoft.com/ja-jp/library/ms131044(v=VS.90).aspx

・表示上"日/月/年"だから
内部はDate型で持っておき,出力時に表示形式を整える。


さくら  2010-06-03 00:48:36  No: 102405

YuOさんの言うとおり  その文では何がしたいのか判らないと言うのも
ごもっともです

何がしたいかと言いますと  スペイン語のOS(XP)でaccessのDBに日付を入れると、2010年6月1日の場合。01/06/2010と入ります
VBでWindowsの時計から読み込むと、やはり01/06/2010なります

これをVBのDim dt3 As Object
dt3 = DateAdd("d", 1, d1) などで日付を出そうとすると
VBの方では、MM/dd/yyyyと認識してしまい本来02/06/2010とならないと
いけないのですが、01/07/2010と計算してしまします。

これの解消の仕方が判らなく色々コードを書いていたら、あのような文に
なってしまいました。

この解消法をご存知の方がおりましたら、なにとぞご教授のほど宜しくお願いします。

せっかくお答え頂いてるのに、混乱させるような文を書いてしまい
まことに申し訳ございませんでした。


魔界の仮面弁士  2010-06-03 06:47:58  No: 102406

> スペイン語のOS(XP)でaccessのDBに日付を入れると、2010年6月1日の場合。01/06/2010と入ります

繰り返しの指摘となりますが、『日付型』なのか『文字列』なのかを明確にしましょう。
OS がスペイン語版であるかどうかは、さほど重要では無いと思います。

DB の項目が日付型なら、Access で表示したときの“見た目”がどうであれ、
データそのものは 2010年6月1日を指しているはずです。それを "dd/MM/yyyy" 形式に
変換して表示するというのは、アプリケーション側の仕事です。
(その変換書式に関する話は、既に示していますね)

また、DB の項目が文字列型であったなら(できれば日付型の方が良いと思いますが)、
そこに "dd/MM/yyyy" 形式でデータを入れるというのも、これもまた
アプリケーション側の仕事です。日付→文字列という変換ですね。
この場合は、確かに文字列→日付への再変換が必要になってしまう可能性が
ありますが、それについては YuO さんが既に回答されていますね。

> この解消法をご存知の方がおりましたら、なにとぞご教授のほど宜しくお願いします。
…?  TryParseExact メソッドでは、何か都合が悪いのでしょうか?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加