pub struct DateTime {
pub year: u16,
pub month: u8,
pub day: u8,
pub hour: u8,
pub minute: u8,
pub second: u8,
pub nanosecond: Option<u32>,
pub offset: Option<i16>,
}
Expand description
A struct used to parse a DateTime field.
§Examples
use exif::DateTime;
let dt = DateTime::from_ascii(b"2016:05:04 03:02:01")?;
assert_eq!(dt.year, 2016);
assert_eq!(dt.to_string(), "2016-05-04 03:02:01");
Fields§
§year: u16
§month: u8
§day: u8
§hour: u8
§minute: u8
§second: u8
§nanosecond: Option<u32>
The subsecond data in nanoseconds. If the Exif attribute has more sigfinicant digits, they are rounded down.
offset: Option<i16>
The offset of the time zone in minutes.
Implementations§
Source§impl DateTime
impl DateTime
Sourcepub fn from_ascii(data: &[u8]) -> Result<DateTime, Error>
pub fn from_ascii(data: &[u8]) -> Result<DateTime, Error>
Parse an ASCII data of a DateTime field. The range of a number is not validated, so, for example, 13 may be returned as the month.
If the value is blank, Error::BlankValue
is returned.
Examples found in repository?
examples/reading.rs (line 76)
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
fn main() {
let file = File::open("tests/exif.jpg").unwrap();
let exif = Reader::new().read_from_container(
&mut BufReader::new(&file)).unwrap();
// To obtain a string representation, `Value::display_as`
// or `Field::display_value` can be used. To display a value with its
// unit, call `with_unit` on the return value of `Field::display_value`.
let tag_list = [Tag::ExifVersion,
Tag::PixelXDimension,
Tag::XResolution,
Tag::ImageDescription,
Tag::DateTime];
for tag in tag_list {
if let Some(field) = exif.get_field(tag, In::PRIMARY) {
println!("{}: {}",
field.tag, field.display_value().with_unit(&exif));
}
}
// To get unsigned integer value(s) from either of BYTE, SHORT,
// or LONG, `Value::get_uint` or `Value::iter_uint` can be used.
if let Some(field) = exif.get_field(Tag::PixelXDimension, In::PRIMARY) {
if let Some(width) = field.value.get_uint(0) {
println!("Valid width of the image is {}.", width);
}
}
// To convert a Rational or SRational to an f64, `Rational::to_f64`
// or `SRational::to_f64` can be used.
if let Some(field) = exif.get_field(Tag::XResolution, In::PRIMARY) {
match field.value {
Value::Rational(ref vec) if !vec.is_empty() =>
println!("X resolution is {}.", vec[0].to_f64()),
_ => {},
}
}
// To parse a DateTime-like field, `DateTime::from_ascii` can be used.
if let Some(field) = exif.get_field(Tag::DateTime, In::PRIMARY) {
match field.value {
Value::Ascii(ref vec) if !vec.is_empty() => {
if let Ok(datetime) = DateTime::from_ascii(&vec[0]) {
println!("Year of DateTime is {}.", datetime.year);
}
},
_ => {},
}
}
}
Trait Implementations§
Auto Trait Implementations§
impl Freeze for DateTime
impl RefUnwindSafe for DateTime
impl Send for DateTime
impl Sync for DateTime
impl Unpin for DateTime
impl UnwindSafe for DateTime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more