diff --git a/src/column.rs b/src/column.rs index 8b46d9c4bda260229f92c023aa31ef5422526091..11aae591a59b4fb4ab1a2622f27a865b30e46415 100644 --- a/src/column.rs +++ b/src/column.rs @@ -8,7 +8,7 @@ use options::{SizeFormat, TimeType}; pub enum Column { Permissions, FileSize(SizeFormat), - Timestamp(TimeType), + Timestamp(TimeType, i64), Blocks, User, Group, @@ -43,15 +43,15 @@ impl Column { /// to have a header row printed. pub fn header(&self) -> &'static str { match *self { - Column::Permissions => "Permissions", - Column::FileSize(_) => "Size", - Column::Timestamp(t) => t.header(), - Column::Blocks => "Blocks", - Column::User => "User", - Column::Group => "Group", - Column::HardLinks => "Links", - Column::Inode => "inode", - Column::GitStatus => "Git", + Column::Permissions => "Permissions", + Column::FileSize(_) => "Size", + Column::Timestamp(t, _) => t.header(), + Column::Blocks => "Blocks", + Column::User => "User", + Column::Group => "Group", + Column::HardLinks => "Links", + Column::Inode => "inode", + Column::GitStatus => "Git", } } } diff --git a/src/file.rs b/src/file.rs index 07b56a1a62fa4c0f4ca7b8f8c048004a5e89fd55..92732fb069adebdb60d538de5f06882bfc88183c 100644 --- a/src/file.rs +++ b/src/file.rs @@ -13,7 +13,7 @@ use pad::Alignment; use number_prefix::{binary_prefix, decimal_prefix, Prefixed, Standalone, PrefixNames}; use datetime; -use datetime::local::LocalDateTime; +use datetime::local::{LocalDateTime, DatePiece}; use column::{Column, Cell}; use column::Column::*; @@ -99,15 +99,15 @@ impl<'a> File<'a> { /// Get the data for a column, formatted as a coloured string. pub fn display(&self, column: &Column, users_cache: &mut U) -> Cell { match *column { - Permissions => self.permissions_string(), - FileSize(f) => self.file_size(f), - Timestamp(t) => self.timestamp(t), - HardLinks => self.hard_links(), - Inode => self.inode(), - Blocks => self.blocks(), - User => self.user(users_cache), - Group => self.group(users_cache), - GitStatus => self.git_status(), + Permissions => self.permissions_string(), + FileSize(f) => self.file_size(f), + Timestamp(t, y) => self.timestamp(t, y), + HardLinks => self.hard_links(), + Inode => self.inode(), + Blocks => self.blocks(), + User => self.user(users_cache), + Group => self.group(users_cache), + GitStatus => self.git_status(), } } @@ -303,8 +303,7 @@ impl<'a> File<'a> { } } - fn timestamp(&self, time_type: TimeType) -> Cell { - let format = date_format!("{:Y} {:M} {2>:D} {2>:h}:{02>:m}"); + fn timestamp(&self, time_type: TimeType, current_year: i64) -> Cell { // Need to convert these values from milliseconds into seconds. let time_in_seconds = match time_type { @@ -314,6 +313,14 @@ impl<'a> File<'a> { } as i64 / 1000; let date = LocalDateTime::at(time_in_seconds); + + let format = if date.year() == current_year { + date_format!("{2>:D} {:M} {2>:h}:{02>:m}") + } + else { + date_format!("{2>:D} {:M} {4>:Y}") + }; + Cell::paint(Blue.normal(), format.format(date).as_slice()) } diff --git a/src/options.rs b/src/options.rs index cbba1fdf6d665dd87339d921f1462825dfcc4b0e..e12b349fc2ff9d016d0a19077820ef4f76e576dc 100644 --- a/src/options.rs +++ b/src/options.rs @@ -12,6 +12,8 @@ use std::fmt; use getopts; use natord; +use datetime::local::{LocalDateTime, DatePiece}; + use self::Misfire::*; /// The *Options* struct represents a parsed version of the user's @@ -422,16 +424,18 @@ impl Columns { columns.push(Group); } + let current_year = LocalDateTime::now().year(); + if self.time_types.modified { - columns.push(Timestamp(TimeType::FileModified)); + columns.push(Timestamp(TimeType::FileModified, current_year)); } if self.time_types.created { - columns.push(Timestamp(TimeType::FileCreated)); + columns.push(Timestamp(TimeType::FileCreated, current_year)); } if self.time_types.accessed { - columns.push(Timestamp(TimeType::FileAccessed)); + columns.push(Timestamp(TimeType::FileAccessed, current_year)); } if cfg!(feature="git") {