update: add delta, util, meta
This commit is contained in:
parent
c4319f5da3
commit
c7d52a0f32
4 changed files with 607 additions and 0 deletions
68
src/delta.zig
Normal file
68
src/delta.zig
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
// Em time.zig (ou crie um novo arquivo relativedelta.zig e importe)
|
||||
|
||||
pub const RelativeDelta = struct {
|
||||
years: i32 = 0,
|
||||
months: i32 = 0,
|
||||
days: i32 = 0,
|
||||
hours: i32 = 0,
|
||||
minutes: i32 = 0,
|
||||
seconds: i32 = 0,
|
||||
|
||||
pub fn init(fields: struct {
|
||||
years: i32 = 0,
|
||||
months: i32 = 0,
|
||||
days: i32 = 0,
|
||||
hours: i32 = 0,
|
||||
minutes: i32 = 0,
|
||||
seconds: i32 = 0,
|
||||
}) RelativeDelta {
|
||||
return .{
|
||||
.years = fields.years,
|
||||
.months = fields.months,
|
||||
.days = fields.days,
|
||||
.hours = fields.hours,
|
||||
.minutes = fields.minutes,
|
||||
.seconds = fields.seconds,
|
||||
};
|
||||
}
|
||||
|
||||
// Helpers úteis (muito usados depois)
|
||||
pub fn isZero(self: RelativeDelta) bool {
|
||||
return self.years == 0 and
|
||||
self.months == 0 and
|
||||
self.days == 0 and
|
||||
self.hours == 0 and
|
||||
self.minutes == 0 and
|
||||
self.seconds == 0;
|
||||
}
|
||||
|
||||
pub fn normalize(self: *RelativeDelta) void {
|
||||
// Normaliza meses → anos + meses
|
||||
if (self.months >= 12 or self.months <= -12) {
|
||||
const carry = @divTrunc(self.months, 12);
|
||||
self.years += carry;
|
||||
self.months -= carry * 12;
|
||||
}
|
||||
|
||||
// Normaliza segundos → minutos + segundos
|
||||
if (self.seconds >= 60 or self.seconds <= -60) {
|
||||
const carry = @divTrunc(self.seconds, 60);
|
||||
self.minutes += carry;
|
||||
self.seconds -= carry * 60;
|
||||
}
|
||||
|
||||
// Normaliza minutos → horas + minutos
|
||||
if (self.minutes >= 60 or self.minutes <= -60) {
|
||||
const carry = @divTrunc(self.minutes, 60);
|
||||
self.hours += carry;
|
||||
self.minutes -= carry * 60;
|
||||
}
|
||||
|
||||
// Normaliza horas → dias + horas
|
||||
if (self.hours >= 24 or self.hours <= -24) {
|
||||
const carry = @divTrunc(self.hours, 24);
|
||||
self.days += carry;
|
||||
self.hours -= carry * 24;
|
||||
}
|
||||
}
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue