Skip to main content

Benjamin Oakes

Photo of Ben Oakes

Hi, I'm Ben Oakes and this is my geek blog. Currently, I'm a Ruby/JavaScript Developer at Liaison. Previously, I was a Developer at Continuity and Hedgeye, a Research Assistant in the Early Social Cognition Lab at Yale University and a student at the University of Iowa. I also organize TechCorridor.io, ICRuby, OpenHack Iowa City, and previously organized NewHaven.rb. I have an amazing wife named Danielle Oakes.

strftime cheat sheet

by Ben

strftime:
    %a – The abbreviated weekday name (``Sun’‘)
    %A – The full weekday name (``Sunday’‘)
    %b – The abbreviated month name (``Jan’‘)
    %B – The full month name (``January’‘)
    %c – The preferred local date and time representation
    %d – Day of the month (01..31)
    %H – Hour of the day, 24-hour clock (00..23)
    %I – Hour of the day, 12-hour clock (01..12)
    %j – Day of the year (001..366)
    %m – Month of the year (01..12)
    %M – Minute of the hour (00..59)
    %p – Meridian indicator (``AM’’ or ``PM’‘)
    %S – Second of the minute (00..60)
    %U – Week number of the current year,
        starting with the first Sunday as the first
        day of the first week (00..53)
    %W – Week number of the current year,
        starting with the first Monday as the first
        day of the first week (00..53)
    %w – Day of the week (Sunday is 0, 0..6)
    %x – Preferred representation for the date alone, no time
    %X – Preferred representation for the time alone, no date
    %y – Year without a century (00..99)
    %Y – Year with century
    %Z – Time zone name
    % – Literal ``’’ character

Source: the cheat gem (relevant blog post)

Cheat has mostly gone offline, but I still refer to this cheat sheet all the time, years and years later. Perhaps that means that strftime has terrible syntax, but that doesn’t stop it from being ubiquitous.

relative_time_ago in Padrino should be time_ago_in_words

by Ben

You might find relative_time_ago referenced in the Padrino Guides or Padrino Helpers RDocs, but that doesn’t exist.

According to the Application Helpers guides, you probably want distance_of_time_in_words or time_ago_in_words.

Example:

%p
  = time_ago_in_words(my_date)
  ago

For reasons I don’t quite understand, this documentation is also incorrect:

time_ago_in_words(2.days.ago) # => "2 days ago"

The actual behavior is:

time_ago_in_words(2.days.ago) # => "2 days"

I’m planning to move some of this into the padrino-framework project directly. Incorrect documentation is worse than no documentation; maybe it will be more accurate if kept in the code. :)

Rails Timezones

by Ben

I ran into a Rails 3.0.1 timezone issue today that I didn’t see discussed many other places.

Basically, I just want to have a page in my app that shows the time in different time zones. That seems simple and something tailor suited for timezone support.

I started with this:

>> Time.now.in_time_zone('EST')
=> Tue, 23 Nov 2010 11:09:42 EST -05:00

Okay, so far so good. Next:

>> Time.now.in_time_zone('PST')
NoMethodError: undefined method `period_for_utc' for nil:NilClass
[...]
>> Time.now.in_time_zone('CST')
NoMethodError: undefined method `period_for_utc' for nil:NilClass
[...]

Wait, that’s odd… why doesn’t that work? After searching, I found you could use some city names like so:

>> Time.now.in_time_zone('Tokyo')
=> Wed, 24 Nov 2010 01:04:54 JST +09:00

But of course JST won’t work:

>> Time.now.in_time_zone('JST')
NoMethodError: undefined method `period_for_utc' for nil:NilClass
[...]

And neither will major American cities:

>> Time.now.in_time_zone('New York')
NoMethodError: undefined method `period_for_utc' for nil:NilClass
[...]
>> Time.now.in_time_zone('Chicago')
NoMethodError: undefined method `period_for_utc' for nil:NilClass
[...]

Nothing too relevant came up when I googled the above errors and phrases (part of why I’m posting this), but then I came across the rake time:zones:us and rake time:zones:all Rake tasks. They list valid timezones for you.

The thing that gets me is that 'EST' and 'Tokyo' work as expected, but 'PST' and 'New York' don’t. These are what I ended up with:

>> Time.now.in_time_zone('Eastern Time (US & Canada)')
=> Tue, 23 Nov 2010 11:08:12 EST -05:00
>> Time.now.in_time_zone('Central Time (US & Canada)')
=> Tue, 23 Nov 2010 10:06:08 CST -06:00
>> Time.now.in_time_zone('Pacific Time (US & Canada)')
=> Tue, 23 Nov 2010 08:06:23 PST -08:00

Ironically, it lists EST, CST, and PST in the results. It’s still confusing to me why the longhand version is the preferred notation here (sometimes), but at least you’re given the tools to look it up.

Like always, let me know if this post helps you through an error. We’re all in this together.

Update: The good people over at Airbnb found this post helpful when upgrading from Rails 2.3 to 3.0. I’m glad it helped you out!