File.utime, Windows and Ruby 1.8

Discussion in 'Ruby' started by mike, May 9, 2005.

  1. mike

    mike Guest

    The behavior of Fime.utime on Ruby 1.8 on Windows looks wrong:

    H:\devel>type test_mtime.rb
    time = Time.local(2000, 1, 1, 0, 0, 0)
    file = "foo.txt"
    File.open(file, "w") {}
    File.utime time, time, file
    puts time.to_f
    puts File.mtime(file).to_f

    H:\devel>c:\ruby1.8\bin\ruby.exe -v test_mtime.rb
    ruby 1.8.2 (2004-12-25) [i386-mswin32]
    946681200.0
    946684800.0

    The file's mtime is 1 hour later. Using Time.gm doesn't fix the
    problem.

    Compare with Ruby 1.6, which looks good:
    H:\devel>c:\ruby\bin\ruby.exe -v test_mtime.rb
    ruby 1.6.7 (2002-03-01) [i386-mingw32]
    946681200.0
    946681200.0

    I don't know if it's related, but I'm using a FAT32 filesystem.


    mike
    mike, May 9, 2005
    #1
    1. Advertising

  2. On 5/9/05, mike <> wrote:
    > The behavior of Fime.utime on Ruby 1.8 on Windows looks wrong:

    ...
    > The file's mtime is 1 hour later. Using Time.gm doesn't fix the
    > problem.

    ...
    > I don't know if it's related, but I'm using a FAT32 filesystem.
    >=20
    >=20
    > mike
    >=20
    >=20


    I see the same thing, using CIFS to a samba server. I just changed
    File.utime in my quirks.rb:

    class File
    if RUBY_PLATFORM.split("-")[1] =3D=3D "mswin32" then
    #puts "fixing win32 File.utime bug"
    class << self
    alias_method :broken_utime, :utime
    def File.utime( atime, mtime, filename )
    File.broken_utime( atime, mtime-3600, filename )
    end
    end
    end
    end




    --=20

    ----------

    Please do not send personal (non-list-related) mail to this address.
    Personal mail should be sent to .
    Shad Sterling, May 15, 2005
    #2
    1. Advertising

  3. mike

    Guest

    Hi,

    At Mon, 9 May 2005 18:19:34 +0900,
    mike wrote in [ruby-talk:141817]:
    > H:\devel>c:\ruby1.8\bin\ruby.exe -v test_mtime.rb
    > ruby 1.8.2 (2004-12-25) [i386-mswin32]
    > 946681200.0
    > 946684800.0
    >
    > The file's mtime is 1 hour later. Using Time.gm doesn't fix the
    > problem.


    It seems like related to DST.


    Index: win32/win32.c
    ===================================================================
    RCS file: /cvs/ruby/src/ruby/win32/win32.c,v
    retrieving revision 1.148
    diff -U2 -p -r1.148 win32.c
    --- win32/win32.c 14 May 2005 14:57:04 -0000 1.148
    +++ win32/win32.c 15 May 2005 00:43:06 -0000
    @@ -3491,4 +3491,5 @@ unixtime_to_filetime(time_t time, FILETI
    struct tm *tm;
    SYSTEMTIME st;
    + FILETIME lt;

    tm = gmtime(&time);
    @@ -3501,5 +3502,6 @@ unixtime_to_filetime(time_t time, FILETI
    st.wSecond = tm->tm_sec;
    st.wMilliseconds = 0;
    - if (!SystemTimeToFileTime(&st, ft)) {
    + if (!SystemTimeToFileTime(&st, &lt) ||
    + !LocalFileTimeToFileTime(&lt, ft)) {
    errno = map_errno(GetLastError());
    return -1;


    --
    Nobu Nakada
    , May 15, 2005
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Martin Bless
    Replies:
    1
    Views:
    2,866
    Matt Gerrans
    Dec 9, 2004
  2. Matt Scilipoti
    Replies:
    2
    Views:
    198
    Matt Scilipoti
    Jun 6, 2007
  3. Matt Spendlove

    utime a dir and convert Date to Time

    Matt Spendlove, Jan 15, 2008, in forum: Ruby
    Replies:
    3
    Views:
    107
    Siep Korteling
    Jan 15, 2008
  4. zswu
    Replies:
    2
    Views:
    102
  5. Sudeep George
    Replies:
    3
    Views:
    373
    Sudeep George
    Oct 20, 2004
Loading...

Share This Page