タイマーというか時間関係。
std.timeがあまりにもあれだったんで置き換え。
class TimeException: etc.negui.system.exception.NeGuiException;
class FileDateTimeException: etc.negui.system.time.TimeException;
struct FILEDATETIME;
ファイル時刻。
FILETIMEのラッパー。
static SYSTEMDATETIME toSystemDateTime(ref const FILEDATETIME FileDateTime
);
ファイル時刻->システム日時形式変換。
- Params:
- FILEDATETIME FileDateTime
- 変換したいファイル時刻。
- Throws:
- 変換失敗時にFileDateTimeException。
const SYSTEMDATETIME toSystemDateTime();
システム日時形式変換。
- Returns:
- 自身の情報を元に変換されたシステム日時形式。
- Throws:
- 変換失敗時にFileDateTimeException。
static FILEDATETIME toLocalFileDateTime(ref const FILEDATETIME FileDateTime
);
UTCファイル時刻->ローカルファイル時刻変換。
- Params:
- FILEDATETIME FileDateTime
- 変換したいUTCファイル時刻情報。
- Returns:
- 変換されたローカルファイル時刻。
- Throws:
- 変換失敗時にFileDateTimeException。
const FILEDATETIME toLocalFileDateTime();
ローカルファイル時刻変換。
- Returns:
- 自身の情報を元に変換されたローカルファイル時刻。
- Throws:
- 変換失敗時にFileDateTimeException。
static FILEDATETIME toSystemFileDateTime(ref const FILEDATETIME FileDateTime
);
ローカルファイル時刻->UTCファイル時刻変換。
- Throws:
- 変換失敗時にFileDateTimeException。
const FILEDATETIME toSystemFileDateTime();
UTCファイル時刻変換。
- Returns:
- 自身の情報を元に変換されたUTCファイル時刻。
- Throws:
- 変換失敗時にFileDateTimeException。
const bool opEquals(ref const FILEDATETIME FileDateTime
);
const int opCmp(ref const FILEDATETIME FileDateTime
);
class SystemDateTimeException: etc.negui.system.time.TimeException;
struct SYSTEMDATETIME;
SYSTEMTIME SystemTime;
const FILEDATETIME toFileDateTime(ref const SYSTEMDATETIME SystemDateTime
);
システム日時->ファイル時刻変換。
- Params:
- SYSTEMDATETIME SystemDateTime
- 変換したいシステム日時情報。
- Throws:
- 変換失敗時にSystemDateTimeException。
const FILEDATETIME toFileDateTime();
ファイル時刻変換。
- Returns:
- 自身の情報を元に変換された変換されたファイル時刻。
- Throws:
- 変換失敗時にSystemDateTimeException。
static SYSTEMDATETIME localTime();
const bool opEquals(ref const SYSTEMDATETIME SystemDateTime
);
const int opCmp(ref const SYSTEMDATETIME SystemDateTime
);
const Text toText();
const string toString();
string toString();
enum RANGE;
最小/最大値
MONTH_MIN
MONTH_MAX
DAY_MIN
DAY_MAX
WEEK_MIN
WEEK_MAX
HOUR_MIN
HOUR_MAX
MINUTE_MIN
MINUTE_MAX
SECOND_MIN
SECOND_MAX
MS_MIN
MS_MAX
static bool isYear(WORD Year
);
static bool isLeapYear(WORD Year
);
enum WEEK;
曜日。
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
static WEEK getWeekDay(in WORD Year
, in WORD Month
, in WORD Day
);
曜日の取得。
- See Also:
- ウィキペディア, http://ja.wikipedia.org/wiki/%E3%83%84%E3%82%A7%E3%83%A9%E3%83%BC%E3%81%AE%E5%85%AC%E5%BC%8F
- In:
-
isYear(Year
) && isMonth(Month
) && isDay(Day
)
static WORD getMonthDay(WORD Year
, WORD Month
);
月の日数。
- Params:
- WORD Year
- 調べたい年。
- WORD Month
- 調べたい月。
- In:
-
isYear(Year
) && isMonth(Month
)
static WORD nextMonth(WORD NowMonth
);
次の月を取得。
- Params:
- WORD NowMonth
- 現在の月。
static WORD prevMonth(WORD NowMonth
);
前の月を取得。
- Params:
- WORD NowMonth
- 現在の月。
static WORD nextDay(WORD Year
, WORD Month
, WORD Day
);
次の日を取得。
- Params:
- WORD Year
- 現在の年。
- WORD Month
- 現在の月。
- WORD Day
- 現在の日。
- In:
-
isYear(Year
) && isMonth(Month
) && isDay(Day
)
static WORD prevDay(WORD Year
, WORD Month
, WORD Day
);
前の日を取得。
- Params:
- WORD Year
- 現在の年。
- WORD Month
- 現在の月。
- WORD Day
- 現在の日。
- In:
-
isYear(Year
) && isMonth(Month
) && isDay(Day
)
class DateTimeException: etc.negui.system.time.SystemDateTimeException;
class DateTimeParseException: etc.negui.system.time.DateTimeException;
DateTime(MODE, in Text)に関する例外。
class DateTime: etc.negui.system.text.IText;
日時を扱う専用クラス。
ネムぃに特化。
- BUGS:
- 調子乗りすぎた。
もうしんどい、いやや。
- Examples:
auto dt1=new DateTime();
dt1.month = 1;
dt1.day = 31;
dt1.month = 4;
assert(dt1.day == 30); dt1.mode = DateTime.MODE.STRICT;
dt1.month = 1;
dt1.day = 31;
try {
dt1.month = 4;
assert(false);
} catch(DateTimeException) {
assert(true);
}
auto dt2=new DateTime(DateTime.MODE.FLEXIBLE,
2010, 1, 32
);
assert(dt2.month == 2);
assert(dt2.day == 1);
try {
auto dt3=new DateTime(
DateTime.MODE.STRICT,
2010, 1, 32
);
assert(false);
} catch(DateTimeException) {
assert(true);
}
with(new DateTime(DateTime.MODE.FLEXIBLE, Text("2010-01-02T03:04:05.678"))) {
assert(year == 2010);
assert(month == 1);
assert(day == 2);
assert(hour == 3);
assert(minute == 4);
assert(second == 5);
assert(ms == 678);
}
with(new DateTime(DateTime.MODE.FLEXIBLE, Text("2010-12"))) {
assert(year == 2010);
assert(month == 12);
assert(day == 1);
assert(hour == 0);
assert(minute == 0);
assert(second == 0);
assert(ms == 0);
}
with(new DateTime(DateTime.MODE.FLEXIBLE, Text("2010-12-33"))) {
assert(year == 2011);
assert(month == 1);
assert(day == 2);
}
try {
with(new DateTime(DateTime.MODE.STRICT, Text("2010-12-33"))) {
assert(false);
}
} catch(DateTimeException) {
assert(true);
}
auto dt4=new DateTime(DateTime.MODE.FLEXIBLE, 2010, 1, 2, 3, 4, 5, 6);
assert(dt4.toText == Text("2010-01-02T03:04:05"));
assert(dt4.format == Text("[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss]"));
dt4.format ~= Text(".[MS]");
assert(dt4.format == Text("[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss].[MS]"));
assert(dt4.toText == Text("2010-01-02T03:04:05.[MS]"));
assert((dt4.mask & DateTime.MASK.MS) != DateTime.MASK.MS);
dt4.mask |= DateTime.MASK.MS;
assert((dt4.mask & DateTime.MASK.MS) == DateTime.MASK.MS);
assert(dt4.toText == Text("2010-01-02T03:04:05.006"));
dt4.format = Text("[YY]");
assert(dt4.toText == Text("10"));
dt4.format = Text("[Y]-[M]-[D]T[h]:[m]:[s].[ms]");
assert(dt4.toText == Text("2010-1-2T3:4:5.6"));
dt4.mask |= DateTime.MASK.WEEK;
dt4.format = Text("[@W]");
assert(dt4.toText == Text("Sat"));
assert(dt4.week == SYSTEMDATETIME.WEEK.SATURDAY);
dt4.day = 3;
assert(dt4.toText == Text("Sun"));
assert(dt4.week == SYSTEMDATETIME.WEEK.SUNDAY);
dt4.mode = DateTime.MODE.STRICT;
dt4.day = 4;
assert(dt4.toText == Text("Mon")); assert(dt4.week == SYSTEMDATETIME.WEEK.MONDAY);
dt4.weeks[SYSTEMDATETIME.WEEK.TUESDAY] = Text("火曜日");
dt4.day = 5;
assert(dt4.toText == Text("火曜日"));
assert(dt4.week == SYSTEMDATETIME.WEEK.TUESDAY);
dt4.format = Text("[@M]");
assert(dt4.toText == Text("Jan"));
dt4.day = 3;
dt4.format = Text("[@W] [@M] [D] [hh]:[mm]:[ss] [YYYY]");
assert(dt4.toText == Text("Sun Jan 3 03:04:05 2010"));
- History:
- 1.101
,
- programweekの不変条件をmaskに関係なく行うように変更。
- 1.100
- 1.00β19
protected const Text FormatSingle(in Text FormatText
, in Text TargetToken
, int Width
, int Value
);
protected const Text FormatDate(in Text FormatText
, MASK Mask
);
protected static Throwable TogetherAssignment(ref SYSTEMDATETIME SystemDateTime
);
static immutable Text defaultFormat;
static immutable Text[] defaultMonths;
static immutable Text[] defaultWeeks;
protected void Initialize(MODE Mode
);
this(MODE Mode
= (MODE).FLEXIBLE);
現在時刻からDateTimeの生成。
- Params:
- MODE Mode
- 日時設定時の挙動。
this(MODE Mode
, ref const SYSTEMDATETIME SystemDateTime
);
指定日時からDateTimeの生成。
- Params:
- MODE Mode
- 日時設定時の挙動。
- SYSTEMDATETIME SystemDateTime
- 設定する日時情報。
- Throws:
- ModeがMODE.STRICTでSystemDateTimeが不正な場合にDateTimeException。
this(MODE Mode
, ref const FILEDATETIME FileDateTime
);
指定日時からDateTimeの生成。
- Params:
- MODE Mode
- 日時設定時の挙動。
- FILEDATETIME FileDateTime
- 設定する日時情報。
- Throws:
- ModeがMODE.STRICTでFileDateTimeが不正な場合にDateTimeException。
this(MODE Mode
, WORD Year
, WORD Month
= (RANGE).MONTH_MIN, WORD Day
= (RANGE).DAY_MIN, WORD Hour
= (RANGE).HOUR_MIN, WORD Minute
= (RANGE).MINUTE_MIN, WORD Second
= (RANGE).SECOND_MIN, WORD Ms
= (RANGE).MS_MIN);
指定日時からDateTimeの生成。
- Params:
- MODE Mode
- 日時設定時の挙動。
- WORD Year
- 年。
- WORD Month
- 月。
- WORD Day
- 日。
- WORD Hour
- 時。
- WORD Minute
- 分。
- WORD Second
- 秒。
- WORD Ms
- ミリ秒。
- Throws:
- ModeがMODE.STRICTで引数が不正な場合にDateTimeException。
this(MODE Mode
, in Text Value
);
文字列からDateTimeの生成。
- Params:
- MODE Mode
- 日時設定時の挙動。
- Text Value
- 日時情報に変換可能な文字列。
YYYY-MM-DDThh:mm:ss.MS形式(0埋め不要)で指定。
年以外は順々に省略可能。
- Throws:
- Valueを分解できない場合にDateTimeParseException。
ModeがMODE.STRICTで引数が不正な場合にDateTimeException。
- History:
- 1.101
- featuresDateTimeParseException追加。
- bug分割後の代入でひたすら例外。
Text format;
日時書式。
- [Y] this.year
-
年の桁数を指定しない。
データ |
12345 |
1234 |
123 |
12 |
1 |
変換後 |
12345 |
1234 |
123 |
12 |
1 |
- [YY] this.year
-
年の桁数を下二桁に指定。
10未満の場合は0で埋める。
データ |
12345 |
1234 |
123 |
12 |
1 |
変換後 |
45 |
34 |
23 |
12 |
01 |
- [YYYY] this.year
-
年の桁数を下四桁に指定。
1000未満の場合は0で埋める。
データ |
12345 |
1234 |
123 |
12 |
1 |
変換後 |
2345 |
1234 |
0123 |
0012 |
0001 |
- [@M] this.month
-
月の名称を指定。
DateTime.monthName()を使用してDateTime.monthsから月名を使用する。
- [M] this.month
-
月の桁数を指定しない。
- [MM] this.month
-
月の桁数を二桁に指定。
- [D] this.day
-
日の桁数を指定しない。
- [DD] this.day
-
日の桁数を二桁に指定。
- [@W] this.week
-
曜日の名称を指定。
DateTime.weekName()を使用してDateTime.weeksから曜日名を使用する。
- [W] this.week
-
曜日を表す番号を指定。
詳細はSYSTEMDATETIME.WEEKを参照。
- [h] this.hour
-
時間の桁数を指定しない。
- [hh] this.hour
-
時間の桁数を二桁に指定。
- [m] this.minute
-
分の桁数を指定しない。
- [mm] this.minute
-
分の桁数を二桁に指定。
- [s] this.second
-
分の桁数を指定しない。
- [ss] this.second
-
分の桁数を二桁に指定。
- [ms] this.ms
-
ミリ秒の桁数を指定しない。
データ |
123 |
12 |
1 |
変換後 |
123 |
012 |
001 |
- [MS] this.ms
-
ミリ秒の桁数を三桁に指定。
データ |
123 |
12 |
1 |
変換後 |
123 |
012 |
001 |
Text[12u] months;
Text[7u] weeks;
const const(Text) monthName();
const const(Text) weekName();
enum MASK;
文字列変換時の変換マスク。
該当しない箇所は文字列変換されない。
YEAR
MONTH
DAY
WEEK
HOUR
MINUTE
SECOND
MS
DATE
DATES
TIME
TIMES
ALL
MASK mask;
enum MODE;
日時設定時の動作。
FLEXIBLE
STRICT
MODE mode;
protected void ChangeWeek();
const SYSTEMDATETIME.WEEK week();
const Text toText();
文字列変換
maskとformatを元に文字列変換。
- Returns:
- maskがMASK.DATE | MASK.TIMES、formatが[YYYY]-[MM]-[DD]T[hh]:[mm]:[ss].[MS]ならSYSTEMDATETIME.toTextを呼び出し。
それ以外はDateTimeがちまちま変換。
- History:
- 1.101
- bugSYSTEMDATETIME.toTextは曜日を含まないのでmaskがMASK.DATE | MASK.TIMESの時にSYSTEMDATETIME.toTextと等価
- 1.100
- programmaskがMASK.ALLであればSYSTEMDATETIME.toTextと等価。
struct TIMESTAMP;
enum FLAG;
FLAG flags;
DateTime create;
DateTime access;
DateTime update;
const Text toText();