Fun with Time#to_s and locale


#1

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.