I know I’m missing something here, but I’ve bounced around from
Timex trying to get a
:strftime format with the offset computed in the formatted hours to no avail.
Is there a way to format a DateTime string using
:strftime but computing the offset in the hours representation?
Currently, I convert a NaiveDateTime with Timex so that I can see what
Calendar's calculating as the offset (which shows that everything is correct time-wise — just not my formatting ability).
dt = Timex.to_datetime(naive_date_string, "America/New_York")
datetime = Calendar.strftime(dt, "%A %b. %d, %Y @ %I:%M %z")
"Friday Aug. 20, 2021 @ 06:14 -0400"
It seems like whenever I come back to formatting using
:strftime I arrive back in the future because the offset is not able to be computed in the formatted hours.
When I use the
%z to see what the offset is, it’s correct and leaves me wishing I could just use something like
%I only with the offset computed from the inputted datetime.
+hhmm/-hhmm time zone offset from UTC (empty string if naive)
%z already gives you the offset in hours and minutes.
I’m not sure I understood your problem, care to clarify more? What do you mean by “hours representation”?
Also, if you just need the offset, you can use
DateTime struct directly, using fields
std_offset which are in seconds, but you can convert them to hours if you wish.
I was just wondering if there was a way to get the offset calculated in the formatted hours, like
7:00 instead of
10:00 if the offset were say
From what I can tell is that when using
:strftime you always get the hours and offset separately. For example, you’d get
10:00 -0300 (and you can get those separately of course), but you can’t get
7:00 with the offset having been applied to the hours for you.
Is that correct?
So you’re basically trying to convert your datetimes to UTC?
shift_zone/3 might be useful to you, or if you use Timex I think
convert/2 might be useful.
I think you want to convert your datetimes to “Etc/UTC” or similar.
Thank you I think I’ve been going in circles on this one.
BTW, I think I pasted the second link wrong, here it is: Timex.Timezone — timex v3.7.6
For anyone looking for the straightforward answer to this very basic need (not documented anywhere), can be done like this:
DateTime.shift_zone!(DateTime.from_naive!(record.inserted_at, "UTC"), "Asia/Jerusalem")