From: sawadatsuyoshi@... Date: 2020-02-17T19:56:52+00:00 Subject: [ruby-core:97183] [Ruby master Feature#16637] Time#to_s and Date#to_s accept strftime format string Issue #16637 has been updated by sawa (Tsuyoshi Sawada). Since the receiver is a `Time` object or `Time`, at least the `time`-part in `strftime` and `strptime` is redundant. That is for sure. Perhaps aliases like `Time#strf`, `Time.strp` may make sense. ---------------------------------------- Feature #16637: Time#to_s and Date#to_s accept strftime format string https://bugs.ruby-lang.org/issues/16637#change-84290 * Author: ttilberg (Tim Tilberg) * Status: Open * Priority: Normal ---------------------------------------- While terms like `strftime` and `strptime` are ubiqutous through the history of computer science, I feel that the terms are very dense. If you are not already in-the-know, they are gibberish. If you are in the know, they are still a bit clunky. While discussing ways to improve the Time and Date formatting APIs for humanity, I thought a quick and easy improvement would be removing the need to use the method `#strftime`. `#format` is already reserved as a private method, but how do people feel about allowing a format string as an argument for `#to_s`? I'm not comfortable writing C, but the relevant code is [here](https://github.com/ruby/ruby/blob/dcb05179a969a024bbd3b7622f67468ddf07638c/time.c#L4097) It seems like it would be straightforward to use the current strings as default values, but to allow for a format string to be passed in. ``` time_to_s(VALUE time) // add format arg { struct time_object *tobj; GetTimeval(time, tobj); if (TZMODE_UTC_P(tobj)) return strftimev("%Y-%m-%d %H:%M:%S UTC", time, rb_usascii_encoding()); // format || "%Y-%m-%d %H:%M:%S UTC" else return strftimev("%Y-%m-%d %H:%M:%S %z", time, rb_usascii_encoding()); // format || "%Y-%m-%d %H:%M:%S %z" } ``` This would allow an API that feels a bit more intuitive. You still have to know the formatting symbols, but it creates a much more expressive statement: ``` # The current time, to string. What kind of string? A Y-m-d string. Time.now.to_s('%Y-%m-%d') ``` (As an aside for discussion, I feel this way about formatting things like Floats and other numbers also. That API is equally confusing, and a holdover from history in comp-sci.) -- https://bugs.ruby-lang.org/ Unsubscribe: