Bug with strptime('%s %z') and patch fix available


The issue is very simple; DateTime.strptime(’%s %z’) doesn’t work

require ‘date’
date = DateTime.strptime(‘1377283786 -0700’, ‘%s %z’)
puts date.strftime(’%s %z’)

1377283786 +0000

Fortunately there’s a patch available:


After applying this patch, Ruby returns the right date (‘1377283786

Applying this patch wouldn’t affect anybody negatively, because the
people that
use ‘%s’ and assume it’s UTC, can continue to do so. So why not apply

This format is used exensively by Git. If you look at a git commit
object (git
cat-file -p), you find this:

author Junio C Hamano [email protected] 1377283786 -0700

Which correspondes exactly to ‘%s %z’.

Other languages also work correctly:


#include <stdio.h>
#include <time.h>

int main(int argc, char *argv[]) {
struct tm tm;
char buf[0x100];
strptime(“1377283786 -0700”, “%s %z”, &tm);
strftime(buf, sizeof(buf), “%s %z”, &tm);
printf("%s\n", buf);
return 0;

1377283786 -0700


use DateTime::Format::Strptime;

my $format = DateTime::Format::Strptime->new(
pattern => ‘%s %z’,

my $dt = $format->parse_datetime(‘1377283786 -0700’);
print $format->format_datetime($dt), “\n”;

1377283786 -0700

Python doesn’t allow the ‘%s’ format at all, but at least they warn the
about that, Ruby just fails silently with ‘%s %z’.

Unfortunately the discussion in bug #7445 didn’t lead anywhere.

I’m hoping you can take a look at this with fresh eyes and realize it’s
in the
best interest of everyone to apply this patch.

Can we just apply it?


This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs