Issue #6385 has been reported by kolmanv (Kolman Vornovitsky).

----------------------------------------
Bug #6385: mtime vie File.stat(filename).utime vs File.open(filename, 'r').mtime in Windows
https://bugs.ruby-lang.org/issues/6385

Author: kolmanv (Kolman Vornovitsky)
Status: Open
Priority: Normal
Assignee: 
Category: 
Target version: 
ruby -v: ruby 1.9.3p194 (2012-04-20) [i386-mingw32]


Seems that File.stat is not working well under Windows, specifically the mtime member.
This thing maybe related to local time (timezones) which should not because time which is used is unixtime.
On Mac works fine.

Windows: ruby 1.9.3p194 (2012-04-20) [i386-mingw32]
Mac: ruby 1.9.3p202 (2012-04-27 revision 35484) [x86_64-darwin11.3.0]

To reproduce:
RESOURCES_DIR = File.expand_path(File.dirname(__FILE__) + "/test")
MOD_TIME_CONTENTS = Time.at 1306527039

def test_local_os
  Dir.mkdir(RESOURCES_DIR) unless (File.exists?(RESOURCES_DIR))
  file_path = "#{RESOURCES_DIR}/local_os_test.test"
  file = File.open(file_path, "w", 0777) do |file|
    file.puts("kuku")
  end
  file_stats = File.stat(file_path)
  p "MOD_TIME_CONTENTS: #{MOD_TIME_CONTENTS}."
  p "MOD_TIME_CONTENTS: #{MOD_TIME_CONTENTS.to_i}."
  p "file_stat.mtime: #{file_stats.mtime}."
  p "file_stat.mtime: #{file_stats.mtime.to_i}."
  p "File.mtime: #{File.mtime(file_path)}."
  p "File.mtime: #{File.mtime(file_path).to_i}."
  File.utime File.atime(file_path), MOD_TIME_CONTENTS, file_path
  file_stats = File.stat(file_path)
  p "file_stat.mtime: #{file_stats.mtime}."
  p "file_stat.mtime: #{file_stats.mtime.to_i}."
  p "File.mtime: #{File.mtime(file_path)}."
  p "File.mtime: #{File.mtime(file_path).to_i}."
		  
  file_mtime = nil
  file = File.open(file_path, 'r') do |file|
    p "file.open.mtime = #{file.mtime}"
    p "file.open.mtime = #{file.mtime.to_i}"
    file_mtime = file.mtime
  end
		  
  assert_equal(MOD_TIME_CONTENTS, file_mtime)
		  
  # !!! This fails on windows with different timezone
  assert_equal(MOD_TIME_CONTENTS, file_stats.mtime)
end

Second assertion fails:
  1) Failure:
test_local_os(BBFS::FileUtils::Test::TestTimeModification) [test/file_utils/time_modification_test.rb:89]:
<2011-05-27 20:10:39 +0000> expected but was
<2011-05-27 18:10:39 +0000>.


-- 
http://bugs.ruby-lang.org/