From 223d4baee0f9aeb3485321d6f4128eb34e0dfce3 Mon Sep 17 00:00:00 2001 From: Jurriaan Pruis Date: Fri, 2 Mar 2012 10:19:31 +0100 Subject: Default to 1900 date system Office 2011 for Mac uses the 1900 system by default see http://www.officeformachelp.com/2010/10/excel-2011-defaults-to-1900-date-system/ for more info --- lib/axlsx/workbook/workbook.rb | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'lib') diff --git a/lib/axlsx/workbook/workbook.rb b/lib/axlsx/workbook/workbook.rb index b3b10fac..cbb85349 100644 --- a/lib/axlsx/workbook/workbook.rb +++ b/lib/axlsx/workbook/workbook.rb @@ -99,25 +99,17 @@ require 'axlsx/workbook/shared_strings_table.rb' # Creates a new Workbook # The recomended way to work with workbooks is via Package#workbook - # @option options [Boolean] date1904. If this is not specified, we try to determine if the platform is bsd/darwin and set date1904 to true automatically. + # @option options [Boolean] date1904. If this is not specified, date1904 is set to false. Office 2011 for Mac defaults to false. def initialize(options={}) @styles = Styles.new @worksheets = SimpleTypedList.new Worksheet @drawings = SimpleTypedList.new Drawing @charts = SimpleTypedList.new Chart @images = SimpleTypedList.new Pic - self.date1904= options[:date1904].nil? ? is_bsd? : options[:date1904] + self.date1904= !options[:date1904].nil? && options[:date1904] yield self if block_given? end - # Uses RUBY_PLATFORM constant to determine if the OS is freebsd or darwin - # based on this value we attempt to set date1904. - # @return [Boolean] - def is_bsd? - platform = RUBY_PLATFORM.downcase - platform.include?('freebsd') || platform.include?('darwin') - end - # Instance level access to the class variable 1904 # @return [Boolean] def date1904() @@date1904; end -- cgit v1.2.3 From ca7248353d295c74f3dff7e8e003044849c026e7 Mon Sep 17 00:00:00 2001 From: Jurriaan Pruis Date: Fri, 2 Mar 2012 10:23:03 +0100 Subject: epoc => epoch --- README.md | 2 +- lib/axlsx/workbook/worksheet/date_time_converter.rb | 14 +++++++------- test/workbook/worksheet/tc_date_time_converter.rb | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/README.md b/README.md index 37a09854..f23bcde7 100644 --- a/README.md +++ b/README.md @@ -42,7 +42,7 @@ Feature List **5. Automatic and fixed column widths: Axlsx will automatically determine the appropriate width for your columns based on the content in the worksheet, or use any value you specify for the really funky stuff. -**6. Support for automatically formatted 1904 and 1900 epocs configurable in the workbook. +**6. Support for automatically formatted 1904 and 1900 epochs configurable in the workbook. **7. Add jpg, gif and png images to worksheets with hyperlinks diff --git a/lib/axlsx/workbook/worksheet/date_time_converter.rb b/lib/axlsx/workbook/worksheet/date_time_converter.rb index 5a572781..d2d9a014 100644 --- a/lib/axlsx/workbook/worksheet/date_time_converter.rb +++ b/lib/axlsx/workbook/worksheet/date_time_converter.rb @@ -9,8 +9,8 @@ module Axlsx # @param [Date] date the date to be serialized # @return [Numeric] def self.date_to_serial(date) - epoc = Axlsx::Workbook::date1904 ? Date.new(1904) : Date.new(1899, 12, 30) - (date-epoc).to_f + epoch = Axlsx::Workbook::date1904 ? Date.new(1904) : Date.new(1899, 12, 30) + (date-epoch).to_f end # The time_to_serial methond converts a Time object its excel serialized form. @@ -18,12 +18,12 @@ module Axlsx # @return [Numeric] def self.time_to_serial(time) # Using hardcoded offsets here as some operating systems will not except - # a 'negative' offset from the ruby epoc. - epoc1900 = -2209161600 # Time.utc(1899, 12, 30).to_i - epoc1904 = -2082844800 # Time.utc(1904, 1, 1).to_i + # a 'negative' offset from the ruby epoch. + epoch1900 = -2209161600 # Time.utc(1899, 12, 30).to_i + epoch1904 = -2082844800 # Time.utc(1904, 1, 1).to_i seconds_per_day = 86400 # 60*60*24 - epoc = Axlsx::Workbook::date1904 ? epoc1904 : epoc1900 - (time.to_f - epoc)/seconds_per_day + epoch = Axlsx::Workbook::date1904 ? epoch1904 : epoch1900 + (time.to_f - epoch)/seconds_per_day end end end diff --git a/test/workbook/worksheet/tc_date_time_converter.rb b/test/workbook/worksheet/tc_date_time_converter.rb index 529da917..c78e51eb 100644 --- a/test/workbook/worksheet/tc_date_time_converter.rb +++ b/test/workbook/worksheet/tc_date_time_converter.rb @@ -88,7 +88,7 @@ class TestDateTimeConverter < Test::Unit::TestCase def test_time_to_serial_1904 Axlsx::Workbook.date1904 = true - # ruby 1.8.7 cannot parse dates prior to epoc. see http://ruby-doc.org/core-1.8.7/Time.html + # ruby 1.8.7 cannot parse dates prior to epoch. see http://ruby-doc.org/core-1.8.7/Time.html tests = if @extended_time_range { # examples taken straight from the spec -- cgit v1.2.3