工具方法-判断当前时间是否在指定时间范围

项目中遇到一个需求,简单来说就是预约和抢购,预约有开始时间和结束时间,抢购也有开始时间和结束时间,这些时间只需要在数据库中存储的是 time 类型,因为只需要小时分钟秒,不需要年月日。分享几个工具方法,用来比较当前时间是否在指定时间范围。

Golang

//当前时间是否在指定范围内
//参数为时间字符串,格式为"时:分:秒"
func IsNowInTimeRange(startTimeStr, endTimeStr string) bool {
 //当前时间
 now := time.Now()
 //当前时间转换为"年-月-日"的格式
 format := now.Format("2006-01-02")
 //转换为 time 类型需要的格式
 layout := "2006-01-02 15:04:05"
 //将开始时间拼接“年-月-日 ”转换为 time 类型
 timeStart, _ := time.ParseInLocation(layout, format+" "+startTimeStr, time.Local)
 //将结束时间拼接“年-月-日 ”转换为 time 类型
 timeEnd, _ := time.ParseInLocation(layout, format+" "+endTimeStr, time.Local)
 //使用 time 的 Before 和 After 方法,判断当前时间是否在参数的时间范围
 return now.Before(timeEnd) && now.After(timeStart)
}

Java

/**

* 判断当前时间是否在指定时间内
* @param startTimeStr 开始时间
* @param endTimeStr 结束时间
* @return true:在;false:不在
 */
public static boolean isNowInTimeRange(String startTimeStr, String endTimeStr) {
    LocalTime startTime = LocalTime.parse(startTimeStr);
    LocalTime endTime = LocalTime.parse(endTimeStr);
    int startCompare = startTime.compareTo(LocalTime.now());
    int endCompare = endTime.compareTo(LocalTime.now());
return startCompare* endCompare <= 0;
}

C

/// <summary>
/// 判断当前时间是否在时间段之间
/// </summary>
/// <param name="startTime">开始时间</param>
/// <param name="endTime">结束时间</param>
/// <returns></returns>
public static bool NowTimeBetweenTwoTimes(string startTimeStr, string endTimeStr, int serverTimeStamp)
{
    // 解析时间
    DateTime startTime = DateTime.Parse(startTimeStr);
    DateTime endTime = DateTime.Parse(endTimeStr);

    TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1));
    DateTime serverTime = TimeStampToDateTime(serverTimeStamp);
    // t1 小于 t2 小于零 t1 等于 t2 等于零 t1 大于 t2 大于零
    int startCompare = DateTime.Compare(startTime, serverTime);
    int endCompare = DateTime.Compare(endTime, serverTime);
    return startCompare * endCompare <= 0;
}

本作品采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。