f0rest8
Format a DateTime using :strftime with the offset calculated in the hours
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.

Most Liked
vfsoraki
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.
acrolink
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")
vfsoraki
+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”?
vfsoraki
vfsoraki
You’re welcome.
BTW, I think I pasted the second link wrong, here it is: Timex.Timezone — timex v3.7.6







