FormatTime expects the input time to be formatted a specific way. I separated each date/time part and arranged it so that it would be compatible with FormatTime.
Code: Select all
#SingleInstance, Force
F12::
olApp := ComObjActive("Outlook.Application")
Try {
olItem := olApp.ActiveWindow.CurrentItem
} Catch {
olItem := olApp.ActiveExplorer.Selection.Item(1)
}
If (olItem.Class = 43) {
olMailItem := olItem
} Else {
MsgBox, Mail Item Not Current or Selected
return
}
olReceivedTime := olMailItem.ReceivedTime
; Date/Time Separators
DTS1 := InStr(olReceivedTime, "/",, 1) ; Forward-Slash 1
DTS2 := InStr(olReceivedTime, "/",, DTS1 + 1) ; Forward-Slash 2
DTS3 := InStr(olReceivedTime, " ",, DTS2 + 1) ; Space 1
DTS4 := InStr(olReceivedTime, ":",, DTS3 + 1) ; Colon 1
DTS5 := InStr(olReceivedTime, ":",, DTS4 + 1) ; Colon 2
DTS6 := InStr(olReceivedTime, " ",, DTS5 + 1) ; Space 2
; Date/Time Parts
DTP1 := SubStr(olReceivedTime, 1, DTS1 - 1) ; Month
DTP1P := (StrLen(DTP1) = 1 ? "0" . DTP1 : DTP1) ; Month Padded
DTP2 := SubStr(olReceivedTime, DTS1 + 1, DTS2 - (DTS1 + 1)) ; Day
DTP2P := (StrLen(DTP2) = 1 ? "0" . DTP2 : DTP2) ; Day Padded
DTP3 := SubStr(olReceivedTime, DTS2 + 1, DTS3 - (DTS2 + 1)) ; Year
DTP4 := SubStr(olReceivedTime, DTS3 + 1, DTS4 - (DTS3 + 1)) ; Hour
DTP4P := (StrLen(DTP4) = 1 ? "0" . DTP4 : DTP4) ; Hour Padded
DTP5 := SubStr(olReceivedTime, DTS4 + 1, DTS5 - (DTS4 + 1)) ; Minute
DTP5P := (StrLen(DTP5) = 1 ? "0" . DTP5 : DTP5) ; Minute Padded
DTP6 := SubStr(olReceivedTime, DTS5 + 1, DTS6 - (DTS5 + 1)) ; Second
DTP6P := (StrLen(DTP6) = 1 ? "0" . DTP6 : DTP6) ; Second Padded
DTP7 := SubStr(olReceivedTime, DTS6 + 1, 2) ; AM/PM
FormatTime, olTime, % DTP3 . DTP1P . DTP2P . DTP4P . DTP5P . DTP6P, yyyy-MM-dd HH.mm
FilePathName := A_ScriptDir "\" olTime " - " RegExReplace(olMailItem.Subject, "[\?<>/\\\*""|:]") ".msg"
olMailItem.SaveAs(FilePathName, 3)
return