VBS: вернуть форматированную дату

Я выполняю файл VBS, который возвращает дату изменения другого файла:

Set objFS=CreateObject("Scripting.FileSystemObject")
Set objArgs = WScript.Arguments
strFile= objArgs(0)
WScript.Echo objFS.GetFile(strFile).DateLastModified

Однако я хочу, чтобы дата была отформатирована в dd/MM/yyyy, прежде чем она будет возвращена.

3 ответа

Решение

Вы можете просто взять дату изменения файла и немного выделить ее.

Таким образом, если последняя дата изменения была 30.11.2014, она вернулась бы 30.11.2014 независимо от региональных настроек ПК (которые игнорирует FormatDateTime())

WScript.Echo convertDate(objFS.GetFile(strFile).DateLastModified)

Function convertDate(strDate)
  convertDate = DatePart("d", strDate) & "/" & DatePart("m", strDate) & "/" & DatePart("yyyy", strDate)
End Function

Как показано здесь и на /questions/205578/funktsiya-formata-datyi-dlya-otobrazheniya-datyi-kak-13-yanvarya-2014/205580#205580, вы можете использовать.Net StringBuilder для решения всех ваших проблем с форматированием без зависимости от локали или выполнения дополнительной / конкретной работы:

Option Explicit

Class cFormat
  Private m_oSB
  Private Sub Class_Initialize()
    Set m_oSB = CreateObject("System.Text.StringBuilder")
  End Sub ' Class_Initialize
  Public Function formatOne(sFmt, vElm)
    m_oSB.AppendFormat sFmt, vElm
    formatOne = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatOne
  Public Function formatArray(sFmt, aElms)
    m_oSB.AppendFormat_4 sFmt, (aElms)
    formatArray = m_oSB.ToString()
    m_oSB.Length = 0
  End Function ' formatArray
End Class ' cFormat

Dim oFmt : Set oFmt = New cFormat
WScript.Echo oFmt.FormatOne("Today: {0:dd\/MM\/yyyy}", Date())

выход:

Today: 08/02/2014

Значение, возвращаемое objFS.GetFile(strFile).DateLastModified является значением даты / времени. Вы можете отформатировать это в строку, используя функцию форматирования или преобразования:

dateLastModified = objFS.GetFile(strFile).DateLastModified
WScript.Echo FormatDateTime(dateLastModified, 2)

Это отформатирует значение даты / времени в короткую дату. Как это сделать, зависит от ваших текущих региональных настроек. Например, в некоторых культурах у вас будет "ММ / ДД / ГГГГ", а в других культурах "ДД-ММ-ГГГГ" и т. Д.

Вы также можете получить полный контроль над форматированием, извлекая часть дня, месяца и года и объединяя их в строку:

dateLastModified = objFS.GetFile(strFile).DateLastModified
WScript.Echo Day(dateLastModified) & "/" & Month(dateLastModified) & "/" & Year(dateLastModified)
Другие вопросы по тегам