我正在嘗試通過 Powershell 中的 Windows 表單創建日期/時間選擇器,但在獲取時間正常作業時遇到問題。
我的目標是嘗試將當前時間四舍五入到最接近的 15 分鐘間隔(例如:上午 8 點 43 分到上午 8 點 45 分),然后將 15 分鐘間隔添加到設定時間,例如下午 4 點 30 分。將這些輸出到人們可以選擇的選擇器中。我看過四舍五入的部分,我只看到有人在我只想四舍五入的地方上下四舍五入:
$FifteenMinutes = (New-TimeSpan -Minutes 15 ).Ticks
$Date = Get-Date
$Ticks = ([Math]::Round($Date.Ticks / $FifteenMinutes, 0) * $FifteenMinutes) -as [long]
[DateTime]$Ticks
這是我的代碼:
Add-Type -AssemblyName System.Windows.Forms
# Main Form
$mainForm = New-Object System.Windows.Forms.Form
$font = New-Object System.Drawing.Font("Consolas", 13)
$mainForm.Text = "Pick Time Frame"
$mainForm.Font = $font
#$mainForm.ForeColor = "White"
#$mainForm.BackColor = "DarkOliveGreen"
$mainForm.Width = 300
$mainForm.Height = 200
# DatePicker Label
$datePickerLabel = New-Object System.Windows.Forms.Label
$datePickerLabel.Text = "Date"
$datePickerLabel.Location = "15, 10"
$datePickerLabel.Height = 22
$datePickerLabel.Width = 90
$mainForm.Controls.Add($datePickerLabel)
# TimePicker Label
$TimePickerLabel = New-Object System.Windows.Forms.Label
$TimePickerLabel.Text = "Time"
$TimePickerLabel.Location = "15, 45"
$TimePickerLabel.Height = 22
$TimePickerLabel.Width = 90
$mainForm.Controls.Add($TimePickerLabel)
# DatePicker
$datePicker = New-Object System.Windows.Forms.DateTimePicker
$datePicker.Location = "110, 7"
$datePicker.Width = "150"
$datePicker.Format = [windows.forms.datetimepickerFormat]::custom
$datePicker.CustomFormat = "MM/dd/yyyy"
$datepicker.MinDate = Get-Date
$datepicker.MaxDate = (Get-Date).AddDays(2)
$mainForm.Controls.Add($datePicker)
# TimePicker
$TimePicker = New-Object System.Windows.Forms.DateTimePicker
$TimePicker.Location = "110, 42"
$TimePicker.Width = "150"
$TimePicker.Format = [windows.forms.datetimepickerFormat]::custom
$TimePicker.CustomFormat = "HH:mm:ss"
$TimePicker.ShowUpDown = $TRUE
$mainForm.Controls.Add($TimePicker)
# OD Button
$okButton = New-Object System.Windows.Forms.Button
$okButton.Location = "15, 130"
$okButton.ForeColor = "Black"
$okButton.BackColor = "White"
$okButton.Text = "OK"
$okButton.add_Click({$mainForm.close()})
$mainForm.Controls.Add($okButton)
[void] $mainForm.ShowDialog()
$datepicker.text
$TimePicker.text
任何幫助將非常感激!
uj5u.com熱心網友回復:
使用[Math]::Ceiling()而不是[Math]::Round()始終向上舍入:
$FifteenMinutes = (New-TimeSpan -Minutes 15).Ticks
$Date = Get-Date
[long] $Ticks = ([Math]::Ceiling($Date.Ticks / $FifteenMinutes) * $FifteenMinutes)
# See caveat in bottom section.
[DateTime] $Ticks
要獲得間隔十五分鐘的其他未來時間的串列,只需使用 添加間隔時間跨度的倍數即可;例如:
# Interval, as a [timespan] instance
$fifteenMinutes = [timespan] '0:15' # Alternative to: New-TimeSpan -Minutes 15
# Sample start and end time.
$startTime = Get-Date -Hour 12 -Minute 15 -Second 0
$endTime = Get-Date -Hour 15 -Minute 0 -Second 0
# Create an array of time-of-day strings in 15-minute intervals
# between the start and end time, inclusively:
[string[]] $timeStrings =
while ($startTime -le $endTime) {
$startTime.ToString('HH:mm:ss')
$startTime = $fifteenMinutes
}
注意:使用強制轉換( ) 會產生一個未指定的實體,即一個其屬性值為 的實體,這意味著該實體是代表本地時間點還是UTC 時間點是未指定的。[datetime] [DateTime] $Ticks.KindUnspecified
要確保.Kind保留輸入,請呼叫相關的[datetime] 建構式:
[datetime]::new($Ticks, $Date.Kind)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/381802.html
標籤:电源外壳
