the tm struct contains the year - 1900 but we added that
if we want to use the libc normalization correctly, the tm struct
must have the correct year in it, else the computations for timezones,
etc. fail
instead add a getter that adds the years and a setter that subtracts it again
Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
impl TmEditor {
pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
impl TmEditor {
pub fn new(epoch: i64, utc: bool) -> Result<Self, Error> {
- let mut t = if utc { gmtime(epoch)? } else { localtime(epoch)? };
- t.tm_year += 1900; // real years for clarity
+ let t = if utc { gmtime(epoch)? } else { localtime(epoch)? };
Ok(Self { utc, t })
}
pub fn into_epoch(mut self) -> Result<i64, Error> {
Ok(Self { utc, t })
}
pub fn into_epoch(mut self) -> Result<i64, Error> {
- self.t.tm_year -= 1900;
let epoch = if self.utc { timegm(&mut self.t)? } else { timelocal(&mut self.t)? };
Ok(epoch)
}
let epoch = if self.utc { timegm(&mut self.t)? } else { timelocal(&mut self.t)? };
Ok(epoch)
}
+ pub fn year(&self) -> libc::c_int { self.t.tm_year + 1900 } // see man mktime
pub fn hour(&self) -> libc::c_int { self.t.tm_hour }
pub fn min(&self) -> libc::c_int { self.t.tm_min }
pub fn sec(&self) -> libc::c_int { self.t.tm_sec }
pub fn hour(&self) -> libc::c_int { self.t.tm_hour }
pub fn min(&self) -> libc::c_int { self.t.tm_min }
pub fn sec(&self) -> libc::c_int { self.t.tm_sec }
}
pub fn set_year(&mut self, v: libc::c_int) -> Result<(), Error> {
}
pub fn set_year(&mut self, v: libc::c_int) -> Result<(), Error> {
+ self.t.tm_year = v - 1900;
self.normalize_time()
}
}
self.normalize_time()
}
}