From d53f046bc7960a4913ef028f8881c8e22ae62ca8 Mon Sep 17 00:00:00 2001 From: Robert Haines Date: Thu, 7 Mar 2024 21:31:24 +0000 Subject: [PATCH] Add `Entry#absolute_time?`. This method returns `true` if an entry has timezone information in its timestamps, `false` otherwise. --- lib/zip/entry.rb | 5 +++++ test/entry_test.rb | 8 ++++++++ 2 files changed, 13 insertions(+) diff --git a/lib/zip/entry.rb b/lib/zip/entry.rb index fe3b9f1..9e1a904 100644 --- a/lib/zip/entry.rb +++ b/lib/zip/entry.rb @@ -176,6 +176,11 @@ module Zip send(:time=, value, component: :ctime) end + # Does this entry return time fields with accurate timezone information? + def absolute_time? + @extra.member?('UniversalTime') || @extra.member?('NTFS') + end + # Return the compression method for this entry. # # Returns STORED if the entry is a directory or if the compression diff --git a/test/entry_test.rb b/test/entry_test.rb index 0d88c87..b2d4c14 100644 --- a/test/entry_test.rb +++ b/test/entry_test.rb @@ -340,4 +340,12 @@ class ZipEntryTest < MiniTest::Test entry.gather_fileinfo_from_srcpath('test/data/mimetype') assert_equal(entry.time, File.stat('test/data/mimetype').mtime) end + + def test_absolute_time + entry = ::Zip::Entry.new + refute(entry.absolute_time?) + + entry.time = Time.now + assert(entry.absolute_time?) + end end