I know I’m missing something here, but I’ve bounced around from Calendar
and 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.
1 Like
+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”?
1 Like
Also, if you just need the offset, you can use DateTime
struct directly, using fields utc_offset
and std_offset
which are in seconds, but you can convert them to hours if you wish.
1 Like
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 -0300
.
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?
I think 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.
2 Likes
Thank you I think I’ve been going in circles on this one.
You’re welcome.
BTW, I think I pasted the second link wrong, here it is: Timex.Timezone — timex v3.7.6
1 Like
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")
2 Likes