如何在CMD中传递时间动态值?Ruby时间格式化需求
实现从终端输入时间并转为24小时格式输出
你原来的代码里a = Time.now是直接获取当前时间,完全没用到用户输入的内容,所以才只会输出当前时间。要实现动态输入的功能,我们需要读取终端输入的时间字符串,解析成时间对象,再转成24小时格式输出,下面是具体的解决方案:
基础实现版本
假设你习惯输入12小时制带AM/PM的格式(比如03:45 PM),可以用这段代码:
# 提示用户输入时间格式 puts "Enter the time (format: HH:MM AM/PM, e.g., 03:45 PM or 10:15 AM):" # 获取用户输入并去除首尾空格和换行符 input_time = gets.chomp # 按照指定的12小时制格式解析输入字符串 parsed_time = Time.strptime(input_time, "%I:%M %P") # 输出24小时制格式(%H是00-23的小时,%M是00-59的分钟) puts "24-hour format: #{parsed_time.strftime('%H:%M')}"
如果你更习惯直接输入24小时制的时间(比如15:45),可以简化解析逻辑:
puts "Enter the time (format: HH:MM, e.g., 15:45 or 09:30):" input_time = gets.chomp parsed_time = Time.strptime(input_time, "%H:%M") puts "24-hour format: #{parsed_time.strftime('%H:%M')}"
带错误处理的优化版本
考虑到可能输入错误格式的情况,我们可以添加异常捕获,让程序提示用户重新输入:
loop do puts "Enter the time (format: HH:MM AM/PM, e.g., 03:45 PM):" input_time = gets.chomp begin parsed_time = Time.strptime(input_time, "%I:%M %P") puts "Success! 24-hour format: #{parsed_time.strftime('%H:%M')}" break # 输入正确就退出循环 rescue ArgumentError puts "Invalid time format. Please try again with the correct format." end end
关键逻辑说明
gets.chomp:读取终端输入的字符串,并自动去掉末尾的换行符和首尾空格Time.strptime:这是实现动态功能的核心——它能根据你指定的格式,把用户输入的字符串解析成时间对象(和Time.now固定取当前时间完全不同)strftime('%H:%M'):用%H输出24小时制的小时(00-23),%M输出分钟,组合成标准的24小时时间格式
内容的提问来源于stack exchange,提问作者Harsha Gopal
相关产品推荐
相关产品推荐

