Forum: Ruby Fun with Time#to_s and locale

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Berger, Daniel (Guest)
on 2006-05-23 21:54
(Received via mailing list)
Hi all,

I was futzing around with Time objects and locale.  Searching the
archives I didn't really see anything that let me get Time objects back
in the locale string that I want.

Did I reinvent the wheel?

require 'Win32API'

class Time
   GetDateFormat = Win32API.new('kernel32', 'GetDateFormat', 'LLPPPL',
'I')

   def to_s(lang=0)
      buffer  = 0.chr * 100
      systime = [year, mon, wday, day, hour, min, sec].pack('S*')
      picture = 'dddd MMM dd yyyy' # Or change 'dddd' to 'ddd'

      if GetDateFormat.call(lang, 0, systime, picture, buffer,
buffer.size) == 0
         raise get_last_error
      end

      buffer = buffer[ /^[^\0]*/ ]

      # Splice the hours, minutes and seconds in
      buffer.split.insert(2, "#{hour}:#{min}:#{sec} #{zone}").join(' ')
   end
end

if $0 == __FILE__
   LANG_FRENCH  = 0x0c
   LANG_GERMAN  = 0x07
   LANG_SPANISH = 0x0a

   p Time.now.to_s                # "Tuesday May 11:48:51 MDT 23 2006"
   p Time.now.to_s(LANG_GERMAN)   # "Dienstag Mai 11:48:51 MDT 23 2006"
   p Time.now.to_s(LANG_SPANISH)  # "martes may 11:48:51 MDT 23 2006"
   p Time.now.to_s(LANG_FRENCH)   # "mardi mai 11:48:51 MDT 23 2006"
end

I've no idea how to do this on non-Windows systems.  Is there an easier
way?

Regards,

Dan




This communication is the property of Qwest and may contain confidential
or
privileged information. Unauthorized use of this communication is
strictly
prohibited and may be unlawful.  If you have received this communication
in error, please immediately notify the sender by reply e-mail and
destroy
all copies of the communication and any attachments.
This topic is locked and can not be replied to.