我有一个包含 DD.MM.YYYY 形式的日期的字符串,并希望将其转换为 YYYYMMDD 格式。不需要进行错误检查,因为我可以确保输入字符串具有正确的格式。如何以紧凑的方式完成此操作?注意:我对纯粹基于字符串处理的解决方案感兴趣,而不是创建和格式化
Date
对象。
我想出了简单的解决方案
s ="14.04.2023"
sx = String.slice(s, 6, 4) <> String.slice(s, 3, 2) <> String.slice(s, 0, 2)
这可行,但需要输入大量内容。有没有更“类似长生不老药”的方法?例如,在 Ruby 中我可能会做一个
sx = s.match(/(..).(..).(....)/).captures.reverse.join
这在我看来会更清楚,因为正则表达式显示了提取字符串的哪些部分,而
reverse.join
告诉我们如何将这些部分再次组合在一起。我想知道在 Elixir 中如何实现类似的方法,或者经验丰富的 Elixir 程序员将如何完成这项任务。
鉴于您的问题的前提(即您100%确定输入格式,您不需要验证日期,并且您对本机字符串处理感兴趣),请考虑以下解构:
iex> <<mm::binary-size(2), ".", dd::binary-size(2), ".", yyyy::binary-size(4)>> = "04.12.2024"
"04.12.2024"
这将绑定变量,以便
mm = "04"
、dd = "12"
和 yyyy = "2024"
。当您确切知道每个段有多少个字符时,在解析字符串时,::binary-size(n)
是一个有用的修饰符。