- PR -

[ASP.NET]日付の書式について

投稿者投稿内容
flat
会議室デビュー日: 2005/07/28
投稿数: 7
お住まい・勤務地: 愛知県
投稿日時: 2005-07-28 14:37
flatと申します。
はじめまして、こんにちは。
よろしくお願いいたします

表題の件に関しまして、質問させて下さい
<開発環境>
Windows2000Pro
VS.Net2002
.Net FrameWork1.0
IIS5

<質問内容>
上記環境(A端末)で、既存のwebアプリの修正を行っております。
webFormにて、年月日それぞれのテキストボックスを作成し
システム日付をデフォルト表示させるような仕様があるのですが、
西暦(例:2005)が和暦(例:17)で出力されてしまいます。
西暦2005年を表示させようとすると、

  • DateTime.Now.Year.ToString -> "2005"
  • DateTime.Now.ToString("yyyy") -> "17"
  • Format(#7/28/2005 2:23:47 PM#, "yyyy") -> "17"

という結果になってしまいます。
ところが、同じプログラムを別端末(B端末)にコピーして、
A端末からB端末のIIS経由で実行してみるとA端末のブラウザ
でも問題なく"2005"と表示されます。

[地域]のオプションは、B端末の各設定と同じであることは確認しております

  • カレンダーの種類:"西暦(日本語)"
  • 短い形式:"yyyy/MM/dd"
  • 長い形式:"yyyy'年'MM'月'dd'日'"

です。

また、関係ないかもしれませんが、A端末では
VB6ではNOW= "2005/07/28 14:21:09"
.NetではNOW=#7/28/2005 2:23:47 PM#
を返します。

どこの設定が影響しているのか、ヒントをいただけませんでしょうか?
よろしくお願いいたします
以上です
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-07-28 14:40
引用:

どこの設定が影響しているのか、ヒントをいただけませんでしょうか?


地域のオプションですよね。
で、それに依存したくないがために、ToString などで書式を整えるとかそういう話ではないのですか?



_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
flat
会議室デビュー日: 2005/07/28
投稿数: 7
お住まい・勤務地: 愛知県
投稿日時: 2005-07-28 15:56
flatと申します

じゃんぬねっと様、こんにちは
返信を有難うございます。

引用:

地域のオプションですよね。
で、それに依存したくないがために、ToString などで書式を整えるとかそういう話ではないのですか?



その通りです。そのために、常に西暦4桁で表示されるように
書式指定子:"yyyy"を使用しているつもりなのですが、
自分の開発端末では
DateTime.Now.ToString("yyyy")
Format(#7/28/2005 2:23:47 PM#, "yyyy")
の記述だと、和暦の"17"と表示されてしまいます。

「地域のオプションが"和暦"の場合は"yyyy"指定でも、和暦が
戻ってきてしまう」というお話は過去ログであったのですが
自分の開発端末の地域のオプションは"西暦(日本語)"です。

私は何か思い違いをしているのでしょうか?

別端末のwebサーバで実行すれば、ちゃんと西暦で表示されるということは
IIS側の設定かとも考えたのですが、それらしい項目も見つけられませんでした

ご指摘等いただければと思います
よろしくお願いいたします
以上です
にしざき
ぬし
会議室デビュー日: 2003/06/30
投稿数: 304
投稿日時: 2005-07-28 18:04
CurrentCulture が異なると結果の書式影響が異なるかもしれません。

第2引数に DateTimeFormatInfo.InvariantInfo を指定してみるとどうなるでしょうか。
flat
会議室デビュー日: 2005/07/28
投稿数: 7
お住まい・勤務地: 愛知県
投稿日時: 2005-07-28 21:01
flatと申します

にしざき様、こんばんは
返信有難うございます

引用:

第2引数に DateTimeFormatInfo.InvariantInfo を指定してみるとどうなるでしょうか。



ご指摘有難うございます
ご指摘の通り、
DateTime.Now.ToString("yyyy", System.Globalization.DateTimeFormatInfo.InvariantInfo)
と記述すれば、正しく西暦が表示できました。有難うございました。

基本的に、地域のオプションが"西暦(日本語)"だったら、
DateTime.Now.ToString("yyyy")
でも正しく西暦が表示されると思っていてよろしいのでしょうか?

尚、今回のプログラムは客先にて稼働中であり
客先及び他の開発端末では問題なく西暦で表示されている為
全てを洗い出して変更することは難しいです。
今回は、他の開発端末を借りて作業することに致します。
今後は、必ず第2引数を指定するように癖をつけるか
一度、端末のクリーンアップを図りたいと思います。

また何か、類似例などございましたら教えて下さい

有難うございました
以上です
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-29 05:38
 CultureInfo.CurrentCulture.DisplayName を出力してみてください。2つの端末で、違っていたりします?

_________________
flat
会議室デビュー日: 2005/07/28
投稿数: 7
お住まい・勤務地: 愛知県
投稿日時: 2005-07-29 11:30
flatと申します

Jitta様、こんにちは
返信有難うございます
引用:

CultureInfo.CurrentCulture.DisplayName を出力してみてください。2つの端末で、違っていたりします?


ご指摘有難うございます。

CultureInfo.CurrentCulture.DisplayNameの結果は、両端末で"日本語(日本)"でした。
ところが、このカルチャ情報を色々調べてみましたら
出ました!

<和暦表示される端末>
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern
=>"gg yy'年'MM'月'dd'日' dddd H:mm:ss"
<西暦表示される端末>
System.Globalization.CultureInfo.CurrentCulture.DateTimeFormat.FullDateTimePattern
=>"yyyy'年'M'月'd'日' H:mm:ss"

という結果になりました。
今まで、和暦になっている情報が見つからなかっただけに、ある意味ホッとしました。
これで、一歩前進です。有難うございました。

しかし、上記の情報は"地域のオプション"の設定だと思っていたのですが・・・。
どこか別の場所でも保持されているのでしょうか?

今更こんな質問ではお叱りを受けるかもしれませんが、
CultureInfoクラスで取得されるカルチャ情報は、現在のカルチャ情報ですよね?
IISもしくはVS.NETインストール時のインストール時のカルチャ情報ではありませんよね?

何はともあれ、開発をしつつ引続き調べていきたいと思います
また何かご指摘いただけることがありましたら、よろしくお願いいたします
有難うございました

以上です
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-29 22:33
引用:

flatさんの書き込み (2005-07-29 11:30) より:

しかし、上記の情報は"地域のオプション"の設定だと思っていたのですが・・・。
どこか別の場所でも保持されているのでしょうか?

今更こんな質問ではお叱りを受けるかもしれませんが、
CultureInfoクラスで取得されるカルチャ情報は、現在のカルチャ情報ですよね?
IISもしくはVS.NETインストール時のインストール時のカルチャ情報ではありませんよね?


 なんでしょうね?MSDN にあたってみましたが、地域のオプションから取得する、と書いてあります。あっと、ユーザ設定を上書きするのがどうこう、ってのがあったな。ちょっと、もう一度読み直して、理解できたら何か書きます。
_________________

スキルアップ/キャリアアップ(JOB@IT)