关于如何以纯文本快速将日历的当前月份打印到剪贴板或 Windows 环境中的命令的任何建议?为了清楚起见,我希望看到完整的打印月份,类似于单击 Windows 任务栏中的时钟时看到的内容。我正在考虑一个轻量级的 PowerShell 脚本,或者可能有一些其他预打包的 Windows 应用程序功能可以让我轻松地做到这一点。
问问题
3266 次
3 回答
4
试试这个:
function Get-Calendar($year=(Get-Date).Year,$month=(Get-Date).Month){
$dtfi = New-Object System.Globalization.DateTimeFormatInfo
$AbbreviatedDayNames=$dtfi.AbbreviatedDayNames | ForEach-Object {" {0}" -f $_.Substring(0,2)}
$header= "$($dtfi.MonthNames[$month-1]) $year"
$header=(" "*([math]::abs(21-$header.length) / 2))+$header
$header+=(" "*(21-$header.length))
Write-Host $header -BackgroundColor yellow -ForegroundColor black
Write-Host (-join $AbbreviatedDayNames) -BackgroundColor cyan -ForegroundColor black
$daysInMonth=[DateTime]::DaysInMonth($year,$month)
$dayOfWeek =(New-Object DateTime $year,$month,1).dayOfWeek.value__
$today=(Get-Date).Day
for ($i = 0; $i -lt $dayOfWeek; $i++){Write-Host (" "*3) -NoNewline}
for ($i = 1; $i -le $daysInMonth; $i++)
{
if($today -eq $i){Write-Host ("{0,3}" -f $i) -NoNewline -BackgroundColor red -ForegroundColor white}
else {Write-Host ("{0,3}" -f $i) -NoNewline -BackgroundColor white -ForegroundColor black}
if ($dayOfWeek -eq 6) {Write-Host}
$dayOfWeek = ($dayOfWeek + 1) % 7
}
if ($dayOfWeek -ne 0) {Write-Host}
}
PS> Get-Calendar
January 2013
Su Mo Tu We Th Fr Sa
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
于 2013-01-03T12:28:07.397 回答
1
new-alias Out-Clipboard $env:SystemRoot\system32\clip.exe
(get-date -Format MMMM) |Out-Clipboard
于 2013-01-03T12:57:14.753 回答
0
日历(将线性日期分解为日/月/年的系统)没有当前任何内容。
但是,如果您的意思是DateTime
在给定日历中获取 a 的月份,则需要查看指定 aCultureInfo
在 .NET 中包含选定日历的日期:
$d = Get-Date
$d.ToString('MMMM', [System.Globalization.CultureInfo]::CurrentCulture)
有多种方法可以创建自定义CultureInfo
或(更一般地)实例DateTimeFormatInfo
并作为 的第二个参数传递DateTime.ToString()
。
最简单的方法是获取CultureInfo
使用目标日历的实例,例如:
$ci = [System.Globalization.CultureInfo]::CreatedSpecifiedCulture('jp-jp')
MSDN 有一整页关于使用日历: http: //msdn.microsoft.com/en-us/library/82aak18x%28v=vs.100%29.aspx(这是 PowerShell 3 的 .NET 4 版本)。
于 2013-01-03T12:13:15.710 回答