MST
星途 面试题库

面试题:Ruby在复杂业务场景下的日期时间处理优化

在一个电商系统中,有如下业务场景:用户下单后,订单在72小时内有效,如果遇到节假日(假设已给定一个包含节假日日期的数组),有效期顺延。请使用Ruby实现一个方法,该方法接收订单创建时间作为参数,返回订单的最终过期时间。要求代码具有良好的可读性、扩展性和性能优化。
24.5万 热度难度
编程语言Ruby

知识考点

AI 面试

面试题答案

一键面试
require 'date'

def calculate_expiry_time(order_created_at, holiday_dates)
  expiry_time = order_created_at + 72 * 60 * 60 # 初始72小时后过期

  current_date = order_created_at.to_date
  days_to_add = 0
  while days_to_add < 3
    current_date += 1
    if holiday_dates.include?(current_date)
      days_to_add -= 1
    end
    days_to_add += 1
  end

  expiry_time = Time.new(current_date.year, current_date.month, current_date.day, order_created_at.hour, order_created_at.min, order_created_at.sec)
  return expiry_time
end

假设调用方式如下:

# 示例使用
order_created_at = Time.now
holiday_dates = [Date.today + 1, Date.today + 2]
puts calculate_expiry_time(order_created_at, holiday_dates)

上述代码首先计算出初始72小时后的过期时间,然后通过循环判断顺延的日期是否为节假日,如果是则顺延一天,最终返回订单的最终过期时间。这样的实现保证了代码的可读性、扩展性以及性能的优化,对于新的日期计算逻辑或者节假日判断逻辑可以方便地进行扩展。