forked from dlang/cdcdb
Библиотека модернизирована под использование в БД в качестве первичных ключей UUID идентификаторов.
Время фиксируется в Unix Timestamp метке с миллисекундами. Добавлена новая сущеность StorageFile, который является отправной точкой для работы со снимками. Расширен интерфейс Storage - добавлены дополнительные фозможности для работы со снимками. Введены структуры: для работы со временм - UTS, для работы с идентификатором - Identifier.
This commit is contained in:
parent
dd28c4b4d7
commit
1f50b21457
12 changed files with 989 additions and 602 deletions
61
source/cdcdb/lib/uts.d
Normal file
61
source/cdcdb/lib/uts.d
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
module cdcdb.lib.uts;
|
||||
|
||||
import std.datetime : SysTime, msecs;
|
||||
|
||||
// 2050-01-01 00:00:00 UTC
|
||||
private enum UTS_LAST_TS = 0x967a7600; // 2524608000L
|
||||
// Extended
|
||||
private enum UTS_LAST_TS_EXT = UTS_LAST_TS * 1_000L;
|
||||
|
||||
// Unix Timestamp с миллисекундами
|
||||
struct UTS
|
||||
{
|
||||
private:
|
||||
long _ts;
|
||||
|
||||
long calc(SysTime systime) {
|
||||
long millis = systime.toUnixTime() * 1000L + systime.fracSecs.total!"msecs";
|
||||
return millis;
|
||||
}
|
||||
|
||||
public:
|
||||
this(long ts) {
|
||||
assert(ts < UTS_LAST_TS_EXT);
|
||||
_ts = ts;
|
||||
}
|
||||
|
||||
this(SysTime systime) {
|
||||
_ts = calc(systime);
|
||||
}
|
||||
|
||||
void opAssign(SysTime systime) {
|
||||
_ts = calc(systime);
|
||||
}
|
||||
|
||||
void opAssign(long ts) {
|
||||
assert(ts < UTS_LAST_TS_EXT);
|
||||
_ts = ts;
|
||||
}
|
||||
|
||||
string toString() const
|
||||
{
|
||||
import std.format : format;
|
||||
|
||||
string formatStr = "%04d-%02d-%02d %02d:%02d:%02d.%03d";
|
||||
long seconds = _ts / 1_000L;
|
||||
long millis = _ts % 1_000L;
|
||||
auto sysTime = SysTime.fromUnixTime(seconds) + msecs(millis);
|
||||
return format(formatStr,
|
||||
sysTime.year, sysTime.month, sysTime.day,
|
||||
sysTime.hour, sysTime.minute, sysTime.second,
|
||||
sysTime.fracSecs.total!"msecs");
|
||||
}
|
||||
|
||||
@property const(SysTime) sys() const @safe {
|
||||
return SysTime.fromUnixTime(_ts / 1_000L);
|
||||
}
|
||||
|
||||
@property long unix() const @safe {
|
||||
return _ts;
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue