Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I think the answer to "what's the difference" is one of the unfortunate common answers to this question in the Ruby standard libraries: the two classes/libs were created differently by different people at different times. It's one of the unfortunate consequences of the community nature of Ruby's evolution compared to carefully planned development of something like Java. Developers want new functionality but don't want to step on existing APIs so they just create a new class - to the end user there's no obvious reason for the two to exist.</p> <p>This is true for software libraries in general: often the reason some code or API is the way it is turns out to be historical rather than logical.</p> <p>The temptation is to start with DateTime because it seems more generic. Date... and Time, right? Wrong. Time also does dates better, and in fact can parse timezones where DateTime can't. Also it performs better.</p> <p>I've ended up using Time everywhere.</p> <p>To be safe though, I tend to allow for DateTime arguments to be passed into my Timey APIs, and either convert. Also if I know that both have the method I'm interested in I accept either, like this method I wrote for converting times to XML (for XMLTV files)</p> <pre><code># Will take a date time as a string or as a Time or DateTime object and # format it appropriately for xmtlv. # For example, the 22nd of August, 2006 at 20 past midnight in the British Summertime # timezone (i.e. GMT plus one hour for DST) gives: "20060822002000 +0100" def self.format_date_time(date_time) if (date_time.respond_to?(:rfc822)) then return format_time(date_time) else time = Time.parse(date_time.to_s) return format_time(time) end end # Note must use a Time, not a String, nor a DateTime, nor Date. # see format_date_time for the more general version def self.format_time(time) # The timezone feature of DateTime doesn't work with parsed times for some reason # and the timezone of Time is verbose like "GMT Daylight Saving Time", so the only # way I've discovered of getting the timezone in the form "+0100" is to use # Time.rfc822 and look at the last five chars return "#{time.strftime( '%Y%m%d%H%M%S' )} #{time.rfc822[-5..-1]}" end </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload