Year Wierdness

Why is Rails displaying date like:

Sat Jan 01 13:31:00 UTC 2000

When the date is clearly correct in the database:

reverseblade_development=> select * from blogs;

id | postdate | posttitle | post | created_at | updated_at

Rilindo Foster wrote:

Why is Rails displaying date like:

Sat Jan 01 13:31:00 UTC 2000

When the date is clearly correct in the database:

reverseblade_development=> select * from blogs;
id | postdate | posttitle | post | created_at |
updated_at
----+----------+------------+-------+----------------------------+----------------------------
  4 | 13:31:00 | Test again | again | 2009-12-22 18:32:06.800273 |
2009-12-22 18:32:06.800273

Your 'postdate' is stored as ... Just a time! So Rails defaults to Jan.
01, 2000.
You may want to do a migration and change your column to a datetime... ?
As usual, beware of modifying pre-existing data.

Why is Rails displaying date like:

Sat Jan 01 13:31:00 UTC 2000

When the date is clearly correct in the database:

reverseblade_development=> select * from blogs;
id | postdate | posttitle | post | created_at > updated_at
----+----------+------------+-------+----------------------------+----------------------------
4 | 13:31:00 | Test again | again | 2009-12-22 18:32:06.800273 | 2009-12-22 18:32:06.800273

postdate doesn't look like a date to me. It looks like a time...

Quoting Rilindo Foster <rilindo@gmail.com>:

Why is Rails displaying date like:

Sat Jan 01 13:31:00 UTC 2000

When the date is clearly correct in the database:

reverseblade_development=> select * from blogs;
id | postdate | posttitle | post | created_at | updated_at
----+----------+------------+-------+----------------------------+----------------------------
  4 | 13:31:00 | Test again | again | 2009-12-22 18:32:06.800273 | 2009-12-22 18:32:06.800273

Here is the code that displays the date:

<% @blogs.each do |blog| %>
  <%=h blog.postdate%><br>
  <%=h blog.posttitle %><br>
  <%=h blog.post %><br>
  <%= link_to 'Show', blog %>
  <%= link_to 'Edit', edit_blog_path(blog) %>
  <%= link_to 'Destroy', blog, :confirm => 'Are you sure?', :method => :delete %>
<% end %>

Note: postdate column is a TIME (13:31:00), i.e. time of day. Use a datetime
type in the database.

HTH,
  Jeffrey

Oh my goodness you're right.

Unfortunately, I couldn't seem to change the column type gracefully with postgres:

(in /Users/rilindo/src/rrproj/reverseblade)
== ModifyPostdateColumn: migrating ===========================================
-- change_column(:blogs, :postdate, :datetime)
rake aborted!
An error has occurred, this and all later migrations canceled:

PGError: ERROR: column "postdate" cannot be cast to type "pg_catalog.timestamp"
: ALTER TABLE "blogs" ALTER COLUMN "postdate" TYPE timestamp

(See full trace by running task with --trace)
tristan:reverseblade rilindo$ rake db:migrate
(in /Users/rilindo/src/rrproj/reverseblade)
== ModifyPostdateColumn: migrating ===========================================
-- change_column(:blogs, :postdate, :datetime)
rake aborted!
An error has occurred, this and all later migrations canceled:

PGError: ERROR: column "postdate" cannot be cast to type "pg_catalog.timestamp"
: ALTER TABLE "blogs" ALTER COLUMN "postdate" TYPE timestamp

I ended up having to rename the column and added a new one:

class ModifyPostdateColumn < ActiveRecord::Migration
  def self.up
    rename_column :blogs, :postdate, :old_postdate
    add_column :blogs, :postdate, :datetime
  end

  def self.down
    remove_column :blogs, :postdate
    rename_column :blogs, :old_postdate, :postdate
  end
end

Now It is displaying the right date. Thanks!