-
Notifications
You must be signed in to change notification settings - Fork 3.5k
dk_use_iodata_for_datetime_formatting #14130
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 2 commits
4f66340
621cef0
9303f84
75ed764
6f63ca3
7025133
e091108
09eb9bf
fbdf235
3a1a74e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
|
|
@@ -1220,6 +1220,17 @@ defmodule Calendar.ISO do | |||||
| :basic | :extended | ||||||
| ) :: String.t() | ||||||
| def time_to_string( | ||||||
| hour, | ||||||
| minute, | ||||||
| second, | ||||||
| microsecond, | ||||||
| format \\ :extended | ||||||
| ) do | ||||||
| time_to_iodata(hour, minute, second, microsecond, format) | ||||||
| |> IO.iodata_to_binary() | ||||||
| end | ||||||
|
|
||||||
| def time_to_iodata( | ||||||
| hour, | ||||||
| minute, | ||||||
| second, | ||||||
|
|
@@ -1228,24 +1239,27 @@ defmodule Calendar.ISO do | |||||
| ) | ||||||
| when is_hour(hour) and is_minute(minute) and is_second(second) and | ||||||
| is_microsecond(ms_value, ms_precision) and format in [:basic, :extended] do | ||||||
| time_to_string_guarded(hour, minute, second, microsecond, format) | ||||||
| time_to_iodata_guarded(hour, minute, second, microsecond, format) | ||||||
| end | ||||||
|
|
||||||
| defp time_to_string_guarded(hour, minute, second, {_, 0}, format) do | ||||||
| time_to_string_format(hour, minute, second, format) | ||||||
| defp time_to_iodata_guarded(hour, minute, second, {_, 0}, format) do | ||||||
| time_to_iodata_format(hour, minute, second, format) | ||||||
| end | ||||||
|
|
||||||
| defp time_to_string_guarded(hour, minute, second, {microsecond, precision}, format) do | ||||||
| time_to_string_format(hour, minute, second, format) <> | ||||||
| "." <> (microsecond |> zero_pad(6) |> binary_part(0, precision)) | ||||||
| defp time_to_iodata_guarded(hour, minute, second, {microsecond, precision}, format) do | ||||||
| [ | ||||||
| time_to_iodata_format(hour, minute, second, format), | ||||||
| ".", | ||||||
| microsecond |> zero_pad(6) |> IO.iodata_to_binary() |> binary_part(0, precision) | ||||||
| ] | ||||||
| end | ||||||
|
|
||||||
| defp time_to_string_format(hour, minute, second, :extended) do | ||||||
| zero_pad(hour, 2) <> ":" <> zero_pad(minute, 2) <> ":" <> zero_pad(second, 2) | ||||||
| defp time_to_iodata_format(hour, minute, second, :extended) do | ||||||
| [zero_pad(hour, 2), ":", zero_pad(minute, 2), ":", zero_pad(second, 2)] | ||||||
|
||||||
| [zero_pad(hour, 2), ":", zero_pad(minute, 2), ":", zero_pad(second, 2)] | |
| [zero_pad(hour, 2), ?:, zero_pad(minute, 2), ?:, zero_pad(second, 2)] |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| [zero_pad(year, 4), "-", zero_pad(month, 2), "-", zero_pad(day, 2)] | |
| [zero_pad(year, 4), ?-, zero_pad(month, 2), ?-, zero_pad(day, 2)] |
This should save a small amount of mem, but hey, why not!
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think we would ever reach this, since byte_size is never 0. We should also check that count <= 6.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Same here
| ["-", zero_pad(-val, count)] | |
| [?-, zero_pad(-val, count)] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
there may be a better way for this ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pass the precision to zero pad and do it in one pass?