DOBON.NET DOBON.NETプログラミング掲示板過去ログ

和暦について

  • 題名: 和暦について
  • 著者: さばちゃん
  • 日時: 2006/07/11 14:12:04
  • ID: 16591
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[WinXP Framework 1.1]
分類:[.NET]

現在和暦での動作確認をしていまして
(コンパネで和暦YYYY/MM/DD設定)

SV側が和暦になりません
そういう決まりなのでしょうか?
教えてください

例:本日日付をテキスト出力(Now.ToString("yyyy/MM/dd"))
CL側→18/07/11
SV側→2006/07/11
■No16591に返信(さばちゃんさんの記事)
> 現在和暦での動作確認をしていまして
> (コンパネで和暦YYYY/MM/DD設定)
> 
> SV側が和暦になりません
> そういう決まりなのでしょうか?
> 教えてください

そういう決まりといえばそうなのですが、ちょっと微妙な言い回しですね。
クライアント側の設定がサーバ側に適用されることはありません。

> 例:本日日付をテキスト出力(Now.ToString("yyyy/MM/dd"))
> CL側→18/07/11
> SV側→2006/07/11

書式を決定する場合は以下のオーバーロードを利用します。

 DateTime.ToString メソッド (String, IFormatProvider)
 http://msdn2.microsoft.com/ja-jp/library/8tfzyc64.aspx

--

当スレッドの略語については、

 ・コンパネ -> コントロール パネル
 ・CL -> クライアント
 ・SV -> サーバ

と読み替えさせて頂いております。
じゃんぬねっとさま
回答有難うございます

>クライアント側の設定がサーバ側に適用されることはありません。
現在、CL,SVも同じマシンにしてテストしています
それでSV側が西暦になるので???

いま問題なのが
SVとCLのデータ受け渡しをテキスト文字列で
行っていまして
SV側で日付を文字列変換(EX."2006/07/11")し
それをCL側で文字列→日付変換しますと和暦の2006/07/11と
認識してしまいます

コントロールパネルで和暦指定しても
SV側でyyyy/MM/dd書式で日付変換すれば"2006/07/11"になる
ものだと思っていいのでしょうか?

すいません教えてください
■No16598に返信(さばちゃんさんの記事)
> 現在、CL,SVも同じマシンにしてテストしています
> それでSV側が西暦になるので???

サーバ側というのは、どういうレベルでサーバ側と仰っていますか?
上記の文は、サーバ側だとかクライアント側という切り分けになっていないと思います。

さばちゃんさんは、自分が作業者だからそれを暗黙的に知っていると思いますが、
私は、そこにいるわけではありませんから、明示的に説明して頂かないと、状況すら理解できません。

> いま問題なのがSVとCLのデータ受け渡しをテキスト文字列で行っていまして
> SV側で日付を文字列変換(EX."2006/07/11")し
> それをCL側で文字列→日付変換しますと和暦の2006/07/11と認識してしまいます

サーバ側で「文字列変換」というのは、'具体的に' どこで何をやっているのでしょうか?

私なりに想像して行間を補完すると、サーバ側での処理の結果をクライアント側で受け取ると、
そのようになってしまうということのように思えますが、'具体的に' どうなのでしょうか?

何をもって、「サーバ側」と仰っているのでしょうか?
データベースに格納したものを取得するという意味で、「サーバ側」と仰っているんでしょうか?
(このあたりは、想像しかできません...)

それとも、Web アプリケーション (ASP.NET) 上の... ではなさそうですが...

# 受け取ろうとしている型が System.DateTime 型という点は、わかっています。

> コントロールパネルで和暦指定しても
> SV側でyyyy/MM/dd書式で日付変換すれば"2006/07/11"になる
> ものだと思っていいのでしょうか?
> すいません教えてください

質問の背景を理解できませんから、結論はまだ尚早だと思います。
まだ初心者なのでうまく説明できませんが
WebサービスでSV側に接続しています
(現在、SV接続先は自マシン)
(ASP.NETのプロセスが起動します)
(データベースはSQL Serverを使用しています)

文字列変換とは、
SV側でデータをADO→DataTable
→CSV文字列(カンマ区切)に変換しています

(CSV文字列の例)
1件目(項目名):"項目名A","項目名B","項目名C"
2件目(型) :"String","Integer","Date"
3件目(データ):"001","99","2006/07/01"

Format(日付値,"yyyy/MM/dd")
で日付文字列しています

CK側はそのSV側から受け取った文字列から
→DataTableを作成しています
CDate関数で日付文字列を日付にしています

説明不足ですいません
お世話になります。

■No16601に返信(さばちゃんさんの記事)
すみません。何故 Web サービスのサーバー側で
Now.ToString("yyyy/MM/dd") を
実行した際に、和暦である必要があるのかが解らないのですが...。

2006/07/11 ですよ。という情報
(平成18年07月11日 とか、06/07/11 とか表現の仕方は色々ありますが)
を持っていれば、如何様にも表示の加工は出来ると思うのですが...。

最終的にどこで和暦で表示したいのですか?
OS の設定情報等に頼らず、
(他のマシンへ配置する時に手間が一つ増えますよね?)
和暦として表示したい部分のみで以下の様にカルチャ情報を渡してやって
表示してやる設計もありだとは思うのですが...
Dim culture As System.Globalization.CultureInfo = New System.Globalization.CultureInfo("ja-JP", True)
culture.DateTimeFormat.Calendar = New System.Globalization.JapaneseCalendar()
Console.WriteLine(DateTime.Today.ToString("ggyy年MM月dd日", culture))
2006/07/13(Thu) 11:04:26 編集(投稿者)

見当違いかもしれないのですが、

変換元日付文字列"2006/07/13"を
クライアント(和暦環境)でDateTime.Parse("2006/07/13")して
そのままToString("ggyy/MM/dd")したときの表示文字列が
"平成 2006/07/13"になっちゃうとか?

もしこれならサーバーからもらった文字列を日付に変換して表示したときに自身のカルチャを元に日付変換してしまっているのかも知れません。

もしこの症状なら
DateTime.Parse("2006/07/13", CultureInfo.InvariantCulture)
でカルチャに依存しない日時文字列として変換すればうまくいくかもしれませんよ

さんぷるこーど(和暦環境で試してください)
string SourceDayStr = "2006/07/12";

DateTime ConvDay1 = DateTime.Parse(SourceDayStr);
string ConvDayStr1 = ConvDay1.ToString("ggyy/MM/dd");
MessageBox.Show(ConvDayStr1); //これだと"平成2006/07/12"と表示。

DateTime ConvDay2 = DateTime.Parse(SourceDayStr", CultureInfo.InvariantCulture);
string ConvDayStr2 = ConvDay2.ToString("ggyy/MM/dd");
MessageBox.Show(ConvDayStr2); //これだと"平成18/07/12"と表示。

#コード修正。
  • 題名: Re[7]: 和暦について
  • 著者: さばちゃん
  • 日時: 2006/07/13 17:51:36
  • ID: 16633
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
>変換元日付文字列"2006/07/13"を
>クライアント(和暦環境)でDateTime.Parse("2006/07/13")して
>そのままToString("ggyy/MM/dd")したときの表示文字列が
>"平成 2006/07/13"になっちゃうとか?>

なっちゃいます
さんぷる確かめてみましたら
正常に日付が取得できました(感謝!!!)

基本的には西暦で動かしてもらうので
対応は劣後になると思いますが
みなさま有難うございました
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板