Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 242 Vote(s) - 3.67 Average
  • 1
  • 2
  • 3
  • 4
  • 5
How to understand strptime vs. strftime

#1
What's the difference between `strptime` and `strftime`? I see that `strptime` is a method in the `DateTime` class, and `strftime` is a method in the `Time` class.

1. What's the difference between `Time` and `DateTime`, other than that they have different core methods? The explanation for the `Time` class in the Ruby docs is helpful, but the one for [`DateTime`][1] just says "datetime". There's also the [`Date`][2] class, which says it provides `Date` and `DateTime`. Help me make sense of this.
2. I see `strptime` and I want to pronounce it "strip time", but that doesn't make sense. Is there a good mnemonic-device for it?
3. What do `strptime` and `strftime` mean, anyway?
4. How do you remember which does what?


[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#2
**strptime** means string parser, this will convert a string format to datetime.

**Example:-**

>>>datetime.strptime('2019-08-09 01:01:01', "%Y-%m-%d %H:%M:%S")

>>>datetime.datetime(2019, 8, 9, 1, 1, 1)//Result



**strftime** means string formatter, this will format a datetime object to string format.

**Example:-**

>>>sample_date=datetime.strptime('2019-08-09 01:01:01', "%Y-%m-%d %H:%M:%S")

>>>datetime.strftime(sample_date, "%Y-%d-%m %H:%M:%S")

>>>'2019-09-08 01:01:01'//Result
Reply

#3
The difference between `Time` and `DateTime` has to do with implementation. A large amount of the `DateTime` functionality comes from the Rails world and is an arbitrary date with time of day. It's more of a calendar-based system. `Time` is measured as seconds since January 1, 1970 UTC and is time-zone agnostic. On some systems it is limited to values between 1901 and 2038, a limitation of how traditionally this value is stored as a signed 32-bit integer, but newer versions of Ruby can handle a much wider range, using a 64-bit value or BigNum as required.

In short, `DateTime` is what you get from a database in Rails where Time is what Ruby has traditionally used. If you're working with values where dates are important and you want to know things like the end of the month or what day it'll be six weeks ahead, use DateTime. If you're just measuring elapsed time and don't care about that, use Time. They're easy to convert between if necessary.

`Date` on the other hand is just a calendar date and doesn't have any associated times. You might want to use these where times are irrelevant.

`strptime` is short for "parse time" where `strftime` is for "formatting time". That is, `strptime` is the opposite of `strftime` though they use, conveniently, the same formatting specification. I've rarely seen `strptime` used since `DateTime.parse` is usually good at picking up on what's going on, but if you really need to spell it out, by all means use the legacy parser.
Reply

#4
I read the above answer and it is clear in its delineation of Time, DateTime and Date in Ruby.

Time is packaged with Ruby. It is measured as seconds since January 1, 1970 UTC and is time-zone agnostic. More specifically, the Time class stores integer numbers, which presents the seconds intervals since the Epoch. We can think of this as Unix Time. It has some limitations. I read somewhere if stored as a 64-bit signed integer, it can represent dates between 1823-11-12 to 2116-02-20, but on my system it can represent dates outside this range. If you do not specify the timezone to use in the enviroment variable ENV['TZ'], then it will default to your system time found in /etc/localtime on Unix-like systems. When to use Time? It is useful for measuring time elapse or interpolating a timestamp into a string value.

Rails actually extends the Time class. It accomplishes this through ActiveSupport::TimeWithZone. It provides support for configurable time zones. Note Rails will always convert time zone to UTC before it writes to or reads from the database, no matter what time zone you set in the configuration file. In other words, it is the default behaviour of Rails that all your time will get saved into database in UTC format.

# Get current time using the time zone of current local system or ENV['TZ'] if the latter is set.
Time.now

# Get current time using the time zone of UTC
Time.now.utc

# Get the unix timestamp of current time => 1524855779
Time.now.to_i

# Convert from unix timestamp back to time form
Time.at(1524855779)

# USE Rails implementation of Time! Notice we say Time.current rather than Time.now. This will allow you to use the timezone defined in Rails configuration and get access to all the timezone goodies provided by ActiveSupport::TimeWithZone.
Time.current

TimeWithZone provides a lot of very useful helper methods:

# Get the time of n day, week, month, year ago
1.day.ago
1.week.ago
3.months.ago
1.year.ago

# Get the beginning of or end of the day, week, month ...
Time.now.beginning_of_day
30.days.ago.end_of_day
1.week.ago.end_of_month

# Convert time to unix timestamp
1.week.ago.beginning_of_day.to_i

# Convert time instance to date instance
1.month.ago.to_date

For most cases, the Time with the time zone class from Rails’ ActiveSupport is sufficient. But sometimes you just need a date.

Just as with the Time class, Ruby is packaged with the Date class. Simply require the time library:

require "time"

Time.parse("Dec 8 2015 10:19")
#=> 2015-12-08 10:19:00 -0200
Date.parse("Dec 8 2015")
#=> #<Date: 2015-12-08>
Time.new(2015, 12, 8, 10, 19)
#=> 2015-12-08 10:19:00 -0200
Date.new(2015, 12, 8)

Since Date is part of Ruby, it by default uses the timezone defined in /etc/localtime on Unix-like systems, unless you modify the TZ environmental variable. Just as with the Time class, Rails extends the Date class. Use Date.current instead of Date.today to take advantage of ActiveSupport::TimeWithZone and use Rails-based timezone configurations.

Now there is one more class available with regards to dates and times. DateTime is a subclass of Date and can easily handles date, hour, minute, second and offset. It is both available in Ruby (via require 'time') and in Rails (via require 'date'). Rails extends it with TimeZone capabilities just like with the Time class.

require 'date'
DateTime.new(2001,2,3,4,5,6)

I personally do not see a need for using DateTime in your applications, for you can use Time itself to represent dates and times, and you can use Date to represent dates.

The second part of the question was regarding strptime and strftime. Time, Date and DateTime all have the strptime and strftime methods. strptime parses the given string representation and creates an object. Here is an example:

> result = Time.strptime "04/27/2018", "%m/%d/%Y"
=> 2018-04-27 00:00:00 -0400
> result.class
=> Time

This is useful if you have an application and a user submits a form and you are given a date and/or represented as a string. You will want to parse it into a Time or Date before you save it to the database.

strftime formats a date or time. So you call it on a Date or Time object:

> Date.current.strftime("%Y-%m-%d")
=> "2018-04-27"

And you can use them together to first parse user input and then format it in a certain way, perhaps to output into a csv file:

value = Date.strptime(val, '%m/%d/%Y').strftime('%Y-%m-%d')



Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through