我有一个代表日期的字符串:
"12.27.1995"
我需要交换月份和日期来获得:
"27.12.1995"
我做了:
date = "12.27.1995"
month = date[0]+date[1]
day = date[3]+date[4]
date[0] = day[0]
date[1] = day[1]
date[3] = month[0]
date[4] = month[1]
它运作良好,但对我来说看起来很糟糕。是否可以使用更少的代码使其更可靠?
答案 0 :(得分:7)
由于您的字符串代表日期,您可能希望使用Date
对象,strptime
来解析原始字符串,strftime
以所需格式输出:
require 'date'
date = Date.strptime("12.27.1995", "%m.%d.%Y")
puts date.strftime("%d.%m.%Y")
# 27.12.1995
答案 1 :(得分:6)
是。也许是这样的:
date = "12.27.1995"
m, d, y = date.split(".")
date = [d, m, y].join(".")
答案 2 :(得分:1)
虽然@sawa的答案完全有效并且应该在这里使用,但我会展示一些错误的技术,不应该在这里使用,但可能是有助于任何人交换字符串的两个固定部分:
"12.27.1995".tap { |s| s[0..1], s[3..4] = s[3..4], s[0..1] }
#⇒ "27.12.1995"
答案 3 :(得分:1)
不优雅,但使用正则表达式捕获方式:
/(\d{1,2})\.(\d{1,2})\.(\d{4})/.match "12.27.1995"
[$2, $1, $3].join('.') #=> "27.12.1995"