根据时间获取每个日期的最新信息

时间:2015-08-17 06:49:27

标签: powershell

有一份如下所示的文件:

class Foo
{
    static void Main(string[] args)
    {
        AppDomain.CurrentDomain.ProcessExit += new EventHandler(CurrentDomain_ProcessExit); 
       // Do your stuffs
    }

    static void CurrentDomain_ProcessExit(object sender, EventArgs e)
    {
        Process p = new Process();
        p.StartInfo.FileName = "Full path of exe";
        p.StartInfo.Arguments = "arguments";
        p.Start();
    }
}

这是一个动态创建的文件。正如您所看到的那样,它是AM和PM的混合体,单个日期可以包含这么多条目,也可以只有一个条目。我需要做的是需要找到一个日期有多少条目,并根据时间找到每个日期最近的条目并将它们写入文件,比如date.txt。

我试过Measure-Latest,但它让我成为所有条目中最新的一个。有人可以帮我这个。任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

我会使用static ParseExact Datetime方法来解析日期并将它们存储在数组中:

$entries = @(
    '7/30/2015 9:15:24 PM', 
    '7/30/2015 9:18:45 PM',
    '7/31/2015 7:13:26 AM',
    '7/31/2015 9:22:46 PM',
    '8/01/2015 9:26:07 AM'
)

$usCulture = New-Object system.globalization.cultureinfo("en-US")
$parseFormat = 'M/dd/yyyy h:mm:ss tt'

$dates = $entries | % {[Datetime]::ParseExact($_, $parseFormat , $usCulture)}

$dates的输出现在是:

PS D:\> $dates

Donnerstag, 30. Juli 2015 21:15:24
Donnerstag, 30. Juli 2015 21:18:45
Freitag, 31. Juli 2015 07:13:26
Freitag, 31. Juli 2015 21:22:46
Samstag, 1. August 2015 09:26:07

现在,您可以使用groupsort来获得所需的输出。例如,每个日期有多少条目:

PS D:\> $dates | group { $_.ToShortDateString() } -NoElement

Count Name                     
----- ----                     
    2 30.07.2015               
    2 31.07.2015               
    1 01.08.2015 

每个日期最近的一个:

$recentDates = $dates | sort { $_.Ticks } -Descending | group { $_.ToShortDateString() } | % {$_.Group | select -first 1} 
$entries | where { [Datetime]::ParseExact($_, $parseFormat , $usCulture) -in $recentDates}

输出:

7/30/2015 9:18:45 PM
7/31/2015 9:22:46 PM
8/01/2015 9:26:07 AM