概要 anchor.png Edit

時刻はDurationとの計算だけでは表すことが出来ないことがあります。たとえば、1ヶ月進める、といった場合、1ヶ月が何日間かわからないため、Durationでは表現することが出来ません。1年も閏年があるので、日数が不明で、Durationで表現することが出来ません。

そこで、SysTime.rollという関数を使います。

Page Top

ポイント anchor.png Edit

SysTime.rollは、テンプレート関数になっていて、テンプレート引数に"months"(ヶ月後)または"years"(年後)を指定します。

currentTime.roll!"months"(2);
currentTime.roll!"years"(-1);
Page Top

サンプルコード anchor.png Edit

Everything is expanded.Everything is shortened.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
 
 
-
-
!
|
-
!
|
|
|
|
-
!
|
-
!
|
-
!
|
!
import std.stdio, std.datetime;
 
void main(string[] args)
{
    // 時刻を取得
    auto currentTime1 = Clock.currTime();
    auto currentTime2 = currentTime1;
    // 現在時刻から2ヵ月後に進める
    currentTime2.roll!"months"(2);
    
    writeln(currentTime1);
    writeln(currentTime2);
    
    // 2ヶ月間の日数を確かめる
    writeln((currentTime2 - currentTime1).total!"days");
    
    // 2ヵ月後の1年前は…
    currentTime2.roll!"years"(-1);
    writeln(currentTime2);
    // 日数は?
    writeln((currentTime2 - currentTime1).total!"days");
    
}
Page Top

実行結果 anchor.png Edit

1
2
3
4
5
2011-Feb-20 11:44:20.037
2011-Apr-20 11:44:20.037
59
2010-Apr-20 11:44:20.037
-306

閏年じゃない2月だから、今月の残りの日数8日間、3月の1ヶ月間の31日間、4月に入ってからの20日間で、

(28-20)+31+20=59

59日間です。

その1年前は、今年が閏年じゃないので、365日引いて、

59 - 365 = -306

で、306日前ということになります。


Page Top

投票とコメント anchor.png Edit

Choices Vote
大変参考になった1  
参考になった0  
あまり参考にならなかった0  
まったく参考にならなかった0  

No comment. コメント​/SampleCodes​/Phobos​/時間操作​/4Edit

Name:

Front page   Edit Freeze Diff Backup Upload Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 786, today: 1, yesterday: 0
Princeps date: 2011-02-20 (Sun) 11:49:45
Last-modified: 2011-02-20 (Sun) 11:49:45 (JST) (3987d) by ゲスト
メインメニュー

ログイン

ユーザー名:


パスワード:





パスワード紛失  |新規登録

Menu