如何使用Timespan计算距离下一次市场开盘时段的时长?
计算距离下一次市场开市的时长
首先获取当前时间,再根据不同闭市/休市场景确定下一次开市时间,最后通过TimeSpan计算时间差:
# 获取当前时间(避免多次调用Get-Date导致时间不一致) $now = Get-Date # 初始化下一次开市时间变量 $nextMarketOpen = $null # 根据闭市/休市场景判断下一次开市时间 if ($marketbreak) { # 周一至周四17:00-18:00休市,下一次开市为当天18:00 $nextMarketOpen = Get-Date -Year $now.Year -Month $now.Month -Day $now.Day -Hour 18 -Minute 0 -Second 0 } elseif ($marketclosehours) { switch ($now.DayOfWeek) { 'Friday' { # 周五17:00后,下一次开市为周日18:00 $daysUntilSunday = (7 - $now.DayOfWeek.value__) % 7 $nextMarketOpen = $now.AddDays($daysUntilSunday).Date.AddHours(18) } 'Saturday' { # 周六全天,下一次开市为周日18:00 $nextMarketOpen = $now.AddDays(1).Date.AddHours(18) } 'Sunday' { # 周日18:00前,下一次开市为当天18:00 $nextMarketOpen = Get-Date -Year $now.Year -Month $now.Month -Day $now.Day -Hour 18 -Minute 0 -Second 0 } } } # 计算并输出时间差 if ($nextMarketOpen) { $timeUntilOpen = $nextMarketOpen - $now Write-Host "距离下一次开市还有: $($timeUntilOpen.Days)天 $($timeUntilOpen.Hours)小时 $($timeUntilOpen.Minutes)分钟 $($timeUntilOpen.Seconds)秒" }
代码说明
- 提前获取当前时间,避免多次调用
Get-Date出现时间偏差 - 针对工作日午间休市(
$marketbreak),直接取当天18点作为开市时间 - 针对不同闭市场景(
$marketclosehours):- 周五17点后:计算到周日的间隔天数,取周日18点
- 周六:直接顺延1天到周日18点
- 周日18点前:取当天18点
- 通过两个时间对象相减得到
TimeSpan,从中提取具体时长信息输出
内容的提问来源于stack exchange,提问作者iceman
相关产品推荐
相关产品推荐

