C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: 日付の計算


(過去ログ 72 を表示中)

[トピック内 9 記事 (1 - 9 表示)]  << 0 >>

■42067 / inTopicNo.1)  日付の計算
  
□投稿者/ ぱぴ (1回)-(2009/10/07(Wed) 14:31:43)

分類:[VB.NET/VB2005 以降] 

VB2008

いつも参考にさせていただきます。
初めて質問いたします。

2つの日付から
?年?月?日経過したかを知りたいのですが
そういうことは可能でしょうか?

例) 2008/10/1, 2009/12/4 の場合、「1年2月3日」と出したい

2つの日付から
Date.Subtractで経過日数は取得できましたが
?年?月?日への変換のやり方が分かりませんでした。

DateDiff関数を使用した場合、
経過年、経過月は求めれましたが
日数の求め方が分かりませんでした。

        Dim a As New Date(2008, 10, 1)
        Dim b As New Date(2009, 12, 4)
        MsgBox(DateDiff(DateInterval.Year, a, b))
        MsgBox(DateDiff(DateInterval.Month, a, b) Mod 12)
        ' MsgBox(DateDiff(DateInterval.Day, a, b)) ← 日数の算出ができない

良い方法がありましたらご教示ください。
よろしくお願い致します。

引用返信 編集キー/
■42068 / inTopicNo.2)  Re[1]: 日付の計算
□投稿者/ 自作 (4回)-(2009/10/07(Wed) 14:45:23)
No42067 (ぱぴ さん) に返信
> 例) 2008/10/1, 2009/12/4 の場合、「1年2月3日」と出したい
素朴な疑問。
2008/12/4, 2009/10/1 の場合、どうなるの?
2009/12/4, 2008/10/1 の場合、どうなるの?

引用返信 編集キー/
■42072 / inTopicNo.3)  Re[2]: 日付の計算
□投稿者/ ぱぴ (2回)-(2009/10/07(Wed) 15:24:40)
No42068 (自作 さん) に返信
> ■No42067 (ぱぴ さん) に返信
>>例) 2008/10/1, 2009/12/4 の場合、「1年2月3日」と出したい
> 素朴な疑問。

> 2008/12/4, 2009/10/1 の場合、どうなるの?
 0年9月28日です。

> 2009/12/4, 2008/10/1 の場合、どうなるの?
 事前にチェックをするので、日付が逆転する場合は意識しなくてもよいです。

DateDiff関数は、年や月を跨いだ回数を出す?ようでしたので
期待した値は出力されていませんでした。

やはり、自前で実装するしかないのでしょうか。


引用返信 編集キー/
■42074 / inTopicNo.4)  Re[1]: 日付の計算
□投稿者/ επιστημη (2188回)-(2009/10/07(Wed) 15:38:14)
επιστημη さんの Web サイト
> 2つの日付から
> ?年?月?日経過したかを知りたいのですが
> そういうことは可能でしょうか?

二つの日付から経過日数の算出はできますよね。
それを 何年何ヶ月何日 に変換するんでしょうけど、
そのとき 1年は365日? 366日? 一ヶ月は30日? 31日? 29日? それとも 28日?

そこらへんはっきりさせんと誰も答えられんし、
それさえ決まればどってことないんちゃいます?

引用返信 編集キー/
■42079 / inTopicNo.5)  Re[2]: 日付の計算
□投稿者/ アクア (81回)-(2009/10/07(Wed) 16:00:23)
アクア さんの Web サイト
アクアと申します。

επιστημηさんのアドバイスに関連して発言させて頂くなら、
一般的に多く使われるのは [○年×日経過] とかで表示するんじゃないのかなぁ…
引用返信 編集キー/
■42080 / inTopicNo.6)  Re[3]: 日付の計算
□投稿者/ ぱぴ (4回)-(2009/10/07(Wed) 16:13:00)
自作 さん
επιστημη さん
アクア さん

アドバイスありがとうございます。

提供されているメソッドや関数で実現できれば
楽でいいなぁと思って質問致しましたが
まずは仕様の確認が必要ですね。

ありがとうございました。
解決済み
引用返信 編集キー/
■42084 / inTopicNo.7)  Re[4]: 日付の計算
□投稿者/ επιστημη (2192回)-(2009/10/07(Wed) 16:56:10)
επιστημη さんの Web サイト
2009/10/07(Wed) 16:58:34 編集(投稿者)
>> 2008/12/4, 2009/10/1 の場合、どうなるの?

  2009 / 10 / 01
- 2008 / 12 / 04

↓日:01 < 04 なので 月から借りてくる。10月01日を09月31日とする

  2009 / 09 / 31
- 2008 / 12 / 04

↓月:09 < 12 なので年から借りてくる。2009年09月を 2008年21月とする。

  2008 / 21 / 31
- 2008 / 12 / 04
----------------
  0000 / 09 / 27

なんてーことすりゃいんじゃね?
月から借りてくるとき、月の大小と閏年を考慮するだけっしょ。

引用返信 編集キー/
■42096 / inTopicNo.8)  Re[5]: 日付の計算
□投稿者/ ぱぴ (6回)-(2009/10/07(Wed) 19:31:19)
No42084 (επιστημη さん) に返信
> 2009/10/07(Wed) 16:58:34 編集(投稿者)
> 
> >> 2008/12/4, 2009/10/1 の場合、どうなるの?
> 
>   2009 / 10 / 01
> - 2008 / 12 / 04
> 
> ↓日:01 < 04 なので 月から借りてくる。10月01日を09月31日とする
> 
>   2009 / 09 / 31
> - 2008 / 12 / 04
> 
> ↓月:09 < 12 なので年から借りてくる。2009年09月を 2008年21月とする。
> 
>   2008 / 21 / 31
> - 2008 / 12 / 04
> ----------------
>   0000 / 09 / 27
> 
> なんてーことすりゃいんじゃね?
> 月から借りてくるとき、月の大小と閏年を考慮するだけっしょ。
> 

なるほど
年月日で普通の引き算のような繰り上げをするのですね。
その考えは思いつきませんでした。

既に別の方法で実装しましたのでサンプルを書きます。
※まだテストしていませんが。。

1. 経過日数を算出
2. 経過日数から合計月数を算出
3. 年:合計月数/12
   月:合計月数/12の余り 
   日:合計月数算出の時、余った日数

-------------------------------------------------

        Dim dt1 As New DateTime(2008, 12, 4)
        Dim dt2 As New DateTime(2009, 10, 1)

        Dim workDt As DateTime = dt1

        ' 1. 経過日数を算出
        Dim totalDays As Integer = dt2.Subtract(dt1).Days + 1 ' ←仕様上プラス1日

        ' 2. 経過日数から合計月数を算出 
        Dim totalMonths As Integer = 0
        Do
            Dim daysInMonth As Integer = DateTime.DaysInMonth(workDt.Year, workDt.Month)
            If totalDays < daysInMonth Then
                Exit Do
            End If
            totalDays = totalDays - daysInMonth
            totalMonths = totalMonths + 1
            workDt = workDt.AddMonths(1)
        Loop

        ' 3.
        Dim y As Integer = CInt(totalMonths / 12) ' ←自前のメソッドで切捨て
        Dim m As Integer = totalMonths Mod 12
        Dim d As Integer = totalDays

解決済み
引用返信 編集キー/
■42102 / inTopicNo.9)  Re[1]: 日付の計算
□投稿者/ ふと思った (1回)-(2009/10/07(Wed) 22:23:48)
No42067 (ぱぴ さん) に返信

ふと思ったのですが


>
> 例) 2008/10/1, 2009/12/4 の場合、「1年2月3日」と出したい
>
>
> DateDiff関数を使用した場合、
> 経過年、経過月は求めれましたが
> 日数の求め方が分かりませんでした。

これがわかれば日数は計算できるよな気がするが?

2008/10/1 にadd(年) + add(月) で 2009/12/1 になり
4-1 =3 で3日となる気がする。

ひまならやってみて。



解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -