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

和暦→西暦変換

  • 題名: 和暦→西暦変換
  • 著者: ミカ
  • 日時: 2006/05/16 16:29:02
  • ID: 15773
  • この記事の返信元:
    • (なし)
  • この記事への返信:
  • ツリーを表示
環境/言語:[win2k VB.NET >]
分類:[.NET]

過去の掲示板調べてみたんですが、レベルが高すぎて何を書いてらっしゃるのか分かりませんでした…。
質問です。

**********************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    'カレンダー内の日付をクリックして、変数に日付を格納する
    Dim dDate    As   Date
    dDate = sender.selecteddate.tolongdatestring
    Lable1.Text = Format(dDate, "yyyy/mm/dd(ddd)")
End Sub
**********************************************************
"2006年5月16日"を"2006/05/16(Tue)"に変更する方法を教えてください。
お願いいたします。
ミカさん、こんにちは。

■No15773に返信(ミカさんの記事)
> "2006年5月16日"を"2006/05/16(Tue)"に変更する方法を教えてください。

"2006年5月16日" は、和暦ではなく西暦ですので、「和暦 -> 西暦変換」ではないですね。

System.DateTime 構造体に Parse して、初めて書式が整形できます。

  Dim st As String = "2006年5月16日"
  Dim dt As System.DateTime = System.DateTime.Parse(st)

  MessageBox.Show(dt.ToString("yyyy/mm/dd(ddd)"))

これは簡単な例です。
実際には ParseExact を使って厳密に行う必要があります。

.....................................................................
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
じゃんぬねっとさん返信ありがとうございます!

> "2006年5月16日" は、和暦ではなく西暦ですので、「和暦 -> 西暦変換」ではないですね。

…あ、そうですね(^^;) お恥ずかしい…

> System.DateTime 構造体に Parse して、初めて書式が整形できます。
> 
>   Dim st As String = "2006年5月16日"
>   Dim dt As System.DateTime = System.DateTime.Parse(st)
> 
>   MessageBox.Show(dt.ToString("yyyy/mm/dd(ddd)"))
> 
> これは簡単な例です。
> 実際には ParseExact を使って厳密に行う必要があります。

まず、上記のとおり、コーディングしてみました。
*************************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    Dim st   As String = "2006年5月16日"
    Dim dt   As System.DateTime = System.DateTime.Parse(st)

    Label1.Text = dt.ToString("yyyy/mm/dd(ddd)")
End Sub
*************************************************************
しかし、Label1.Textには "2006/00/16(火)" が格納されちゃってます…
"月"の部分が "06" ではなくなってます。
変数"dt"には、"#5/16/2006#" が入ってます。
…おかしいです…(T_T)
■No15776に返信(ミカさんの記事)
> しかし、Label1.Textには "2006/00/16(火)" が格納されちゃってます…

すみません、最初の書き込みからコピって書いたのがまずかったですね。
正しい書式は、"yyyy/MM/dd(ddd)" です。

小文字 (mm) になっていると、minute (分) を表してしまうんですね。
大文字 (MM) にすれば、Month (月) を表すようになります。

.....................................................................
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
  • 題名: Re[3]: 和暦→西暦変換
  • 著者: medaka
  • 日時: 2006/05/16 17:03:53
  • ID: 15778
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
> Label1.Text = dt.ToString("yyyy/mm/dd(ddd)")

月はmm じゃなくて大文字のMMじゃなかったでしたっけ?
詳しくはHelpの日付の書式指定のところを見ればわかると思います
> 月はmm じゃなくて大文字のMMじゃなかったでしたっけ?
ですね。小文字のmだと Minutes の意味になりますね。
ぅゎ。じゃんぬさんのレス見ないで投稿してしまった。 orz

消したいときに限って、削除キーいれってないとは。。。(´△` )トホホ
みなさん回答ありがとうございます!こんなにたくさん…(T_T)v

出来ました!…ここまでは。
**********************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
        Dim st As String = sender.selecteddate.tolongdatestring
        Dim dt As System.DateTime = System.DateTime.Parse(st)
        Label1.Text = dt.ToString("yyyy/MM/dd(ddd)")
End Sub
**********************************************************
で、あと少しです。
この状態では、"2006/05/16(火)" になります。
(火)→(Tue)に変換したいのですが、も少しだけ助けてください…m(__)m
■No15781に返信(ミカさんの記事)
> この状態では、"2006/05/16(火)" になります。
> (火)→(Tue)に変換したいのですが、も少しだけ助けてください…m(__)m

では、お望みのように "少しだけ" 助けます。

MSDN ライブラリの書式指定の項に書いてあると思いますが、カルチャについて調べてみてください。

System.Globalization.CultureInfo クラスです。

.....................................................................
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
MSDN見ていろいろやってみました!

撃沈…さっぱり理解できません…。

エラー三昧です
*****************************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    Dim dtfi As DateTimeFormatInfo = New CultureInfo("en-US", False).DateTimeFormat
    Dim st As String = sender.selecteddate.tolongdatestring
    Label1.Text = DateTime.ParseExact(st, "yyyy/MM/dd(ddd)", dtfi)
End Sub
*****************************************************************
自分でも何がしたいの?って感じです…
ToStringのときにカルチャを指定すればいいのでは?

C#ですが、

string st = "2006年5月16日";
CultureInfo ci = new CultureInfo("en-US");
DateTime dt = DateTime.ParseExact(st, "yyyy年M月dd日", null);
Console.WriteLine(dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat));

> DateTime dt = DateTime.ParseExact(st, "yyyy年M月dd日", null);
> Console.WriteLine(dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat));

ごめんなさい…nullってなんですか???…VBでしたらなんて書けば…(泣)
出来たー!訳も分からずに…

みなさんありがとうございました!
***************************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    Dim st As String = sender.selecteddate.tolongdatestring
    Dim ci As CultureInfo = New CultureInfo("en-US")
    Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月dd日", ci)
    Label.Text = dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
End Sub
***************************************************************
でも訳わかんない…
解決済み!
あ!…でもこれだと、"2006年5月16日"は正常に"2006/05/16(Tue)"ってなりますけど
"2006年6月1日"はエラー出ますよね?

> ***************************************************************
> Sub cal1_SelectionChanged(ByVal sender As Object, _
>                           ByVal e As System.EventArgs)
>     Dim st As String = sender.selecteddate.tolongdatestring
>     Dim ci As CultureInfo = New CultureInfo("en-US")
>     Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月dd日", ci)
>     Label.Text = dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
> End Sub
> ***************************************************************
日付の"日にち"部分が1桁な日付は、エラーが出ちゃいます…
やっと出来たと思ったのにぃ…
完成です…
>>***************************************************************
>>Sub cal1_SelectionChanged(ByVal sender As Object, _
>> ByVal e As System.EventArgs)
>> Dim st As String = sender.selecteddate.tolongdatestring
>> Dim ci As CultureInfo = New CultureInfo("en-US")
>> Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月d日", ci)
>> Label.Text = dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
>>End Sub
>>***************************************************************
疲れました…。
みなさまありがとうございます!初心者相手にお疲れでしょう…(^^;)
解決済み!
■No15791に返信(ミカさんの記事)
> Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月d日", ci)

この 1 行はちょっと違和感がありますね。

.............................................................................................................................
じゃんぬ @ わんくま同盟, Microsoft MVP for Visual Developer - C#
http://jeanne.wankuma.com/
http://blogs.wankuma.com/jeanne/
解決済み!
■No15796に返信(じゃんぬねっとさんの記事)
> ■No15791に返信(ミカさんの記事)
>>Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月d日", ci)
>
> この 1 行はちょっと違和感がありますね。

おはようございます!
なんだか分からないうちに出来てしまったんで…。正解は未だわかりません…。
どなたか教えてくださいm(_ _)m
2006/05/17(Wed) 09:03:51 編集(投稿者)

ParseExactの3番目のカルチャを元に 文字列→日付 の変換をします。

ところで、eu-US というカルチャでは日付の表し方として「yyyy年M月d日」
というのがあるのでしょうか?
((火)→(Tue)というなるカルチャなので「yyyy年M月d日」は違和感がある)

では、どうすればよいかというと、C#でnullを指定しているようにVBでは
Nothingを指定すればよさそうです。(明にja-JPの方がベター?)
Nothingを指定するとデフォルトのカルチャ情報になります。
(CultureInfo.CurrentCulture.DateTimeFormatを指定した場合と同じ)

参考:http://www.atmarkit.co.jp/fdotnet/dotnettips/203dateparse/dateparse.html
これでOKですかぁ?
*******************************************************************
Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    Dim st As String = sender.selecteddate.tolongdatestring
    Dim ci As CultureInfo = New CultureInfo("en-US")
    Dim dt As DateTime = DateTime.ParseExact(st, "yyyy年M月d日", Nothing)
    Label1.Text = dt.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
End Sub
*******************************************************************
よく考えたら、Sender.SelectedDate って、DateTime型ではないのでしょうか?
いちいちToLongDateStringメソッドで文字列に変換しないでもよいのでは?

Sub cal1_SelectionChanged(ByVal sender As Object, _
                          ByVal e As System.EventArgs)
    Dim ci As CultureInfo = New CultureInfo("en-US")
    Label1.Text = Sender.SelectedDate.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
End Sub
回答ありがとうございます!

> Sub cal1_SelectionChanged(ByVal sender As Object, _
>                           ByVal e As System.EventArgs)
>     Dim ci As CultureInfo = New CultureInfo("en-US")
>     Label1.Text = Sender.SelectedDate.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
> End Sub
> 
コピーしてデバッグしてみましたが、 
〜〜〜.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
の ci.DateTimeFormat 箇所でエラーでした。

ERROR MESSAGE-------->>
'Public ReadOnly Default Property Chars(index As Integer) As Char'に対する引数が多すぎます。
<<---------------------
■No15812に返信(ミカさんの記事)
> コピーしてデバッグしてみましたが、
> 〜〜〜.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
> の ci.DateTimeFormat 箇所でエラーでした。
少しは自分で考えては?

つまづいたら何も考えずに丸投げというのはマナー違反です。
この掲示板だとマナー違反どころかルール違反になります。
http://dobon.net/vb/bbs/index.html

> つまづいたら何も考えずに丸投げというのはマナー違反です。
> この掲示板だとマナー違反どころかルール違反になります。
> http://dobon.net/vb/bbs/index.html

当たり前。
■質問の回答に対して必ずフィードバック(結果報告、返事、お礼)をしてください(できるだけ早く)。
とありますので。回答の結果報告をしました。
今も思案中なのは変わりません。
こんにちは。
さしでがましいことかもしれませんが、少し意見させてください。

ミカさんがやられている「フィードバック」(のようなもの)は、実際には「教え
てもらったとおりにやったけど動かないよ。ココから先はどうやってやれば
いいの?」と「結果報告」しているにすぎません。
名無しぃシャープさんがおっしゃられていることは、ミカさんが思案中であれ
ばそれも表明していただきたいということだと思います。

これまでのやり取りを拝見しますと

> ごめんなさい…nullってなんですか???…VBでしたらなんて書けば…(泣)

> 日付の"日にち"部分が1桁な日付は、エラーが出ちゃいます…
> やっと出来たと思ったのにぃ…

> なんだか分からないうちに出来てしまったんで…。正解は未だわかりません…。
> どなたか教えてくださいm(_ _)m

と、教えを請う文章ばかりが目立ち、思案中であるとか自分で考えた(ある
いは考えている)と感じられる部分が少ないのです。名無しぃシャープさん
の意見に「当たり前」と反論されるのは結構ですが、ミカさんの成果が言葉
として出ていない限りは“脊髄反射的逆ギレ”と捕らえられてしまいかねな
いのではないでしょうか。

いろいろあって余裕がなくなっているのかもしれませんが、意見は意見とし
て落ち着いて聞くことも大事だと思いますよ。
■No15822に返信(ぽぴ王子さんの記事)
> こんにちは。
> さしでがましいことかもしれませんが、少し意見させてください。
>
> ミカさんがやられている「フィードバック」(のようなもの)は、実際には「教え
> てもらったとおりにやったけど動かないよ。ココから先はどうやってやれば
> いいの?」と「結果報告」しているにすぎません。
> 名無しぃシャープさんがおっしゃられていることは、ミカさんが思案中であれ
> ばそれも表明していただきたいということだと思います。
>
> これまでのやり取りを拝見しますと
>
>>ごめんなさい…nullってなんですか???…VBでしたらなんて書けば…(泣)
>
>>日付の"日にち"部分が1桁な日付は、エラーが出ちゃいます…
>>やっと出来たと思ったのにぃ…
>
>>なんだか分からないうちに出来てしまったんで…。正解は未だわかりません…。
>>どなたか教えてくださいm(_ _)m
>
> と、教えを請う文章ばかりが目立ち、思案中であるとか自分で考えた(ある
> いは考えている)と感じられる部分が少ないのです。名無しぃシャープさん
> の意見に「当たり前」と反論されるのは結構ですが、ミカさんの成果が言葉
> として出ていない限りは“脊髄反射的逆ギレ”と捕らえられてしまいかねな
> いのではないでしょうか。
>
> いろいろあって余裕がなくなっているのかもしれませんが、意見は意見とし
> て落ち着いて聞くことも大事だと思いますよ。
解決済み!
  • 題名: Re[21]: 和暦→西暦変換
  • 著者: ぽぴ王子
  • 日時: 2006/05/18 18:24:54
  • ID: 15839
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No15823に返信(ミカさんの記事)
> ■No15822に返信(ぽぴ王子さんの記事)



面白いフィードバックですね。
…って、違うのか。
  • 題名: Re[19]: 和暦→西暦変換
  • 著者: 世直しマン
  • 日時: 2006/05/18 23:25:18
  • ID: 15843
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
■No15821に返信(ミカさんの記事)
> 当たり前。
> ■質問の回答に対して必ずフィードバック(結果報告、返事、お礼)をしてください(できるだけ早く)。
> とありますので。回答の結果報告をしました。
> 今も思案中なのは変わりません。

名無しぃシャープさんの意見の意味を、なーーーーんも、わかっていないんですね。
結局自分が助かりたいだけ。

だから解決済とかにしやがる。

他の教えてくださった方に対しても失礼きわまりない行動です。
いっぺん死んでみてはいかがでしょう?これはアドバイスですよ。
私のせいでエラーになってしまったようなので、ヒントを出します。
>     Label1.Text = Sender.SelectedDate.ToString("yyyy/MM/dd(ddd)", ci.DateTimeFormat)
senderをCalender型にキャストしてください。(というか答え。)

それといまさらですが、これってASP.NETですよね?
きちんと環境を明記してもらわないと、、、
No15815 の名無しぃシャープさんのご意見に始まり、いろいろな投稿があったようですが、残念ながら、これらすべての投稿がルール違反となる恐れがあります。

ミカさんの投稿がルール違反であることは言うまでもありませんが(ただ、ルール違反といえるほどの丸投げであるかは難しいですが)、この掲示板では、ルール違反と思われる投稿は無視していただくことになっています。このあたりの判断は難しく、以前も「お気楽掲示板」で話題になりましたが、その時は、アドバイス程度ならいいだろうということになりました。しかし、No15843 の投稿は、明らかにアドバイスとはいいません。

この掲示板は、純粋にプログラミングの話題に興味がある方々に快適に使っていただきたいと思っていますので、それ以外の話は、「お気楽掲示板」へお願いいたします。「これを投稿すると、余計な議論が起こるな」と想像できる話題も、「お気楽掲示板」へお願いします。

以上の事柄をむくめ、ご意見のある方は、「お気楽掲示板」へお願いいたします。

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