Мне нужно преобразовать дату из мм / дд / гггг в дд / мм / гггг в VBScript - PullRequest
0 голосов
/ 25 марта 2010

Пока у меня есть это: FormatDateTime (absoluteItemsRS ("ItemDate"), 0)

Отображение даты в формате мм / дд / гггг. Я хочу преобразовать это в дд / мм / гггг

Пожалуйста, помогите, не знаете, как это сделать.

Спасибо

Ответы [ 3 ]

1 голос
/ 25 марта 2010

Вы должны установить идентификатор локали на тот, который использует желаемый формат даты. Я не помню, какой формат использовался где, но должны работать либо Великобритания (2057), либо США (1033).

Вы не указали свою среду. В ASP вы можете использовать свойство LCID в директиве Language или в классах Session или Response, в зависимости от того, какую область вы хотите установить:

<%@Language="VBScript" LCID="1033"%>

или

Session.LCID = 1033

или

Response.LCID = 1033
0 голосов
/ 21 мая 2015

Чтобы изменить дату с ММ / ДД / ГГГ на ДД / ММ / ГГГГ в VB Script, можно использовать очень простые шаги, как указано ниже

Пусть скажем "дата1" (ММ / ДД / ГГ) = 03.06.2014 Я хочу, чтобы "date2" была в формате ДД / ММ / ГГ, как 03.03.2014

d = Day(date1)
m = Month(date1)
y = Year(date1)
date2 = d & "/" & m & "/" & y

даст требуемый результат.

0 голосов
/ 25 марта 2010

Вам нужна функция FormatDate. Раньше я делал это нелегко, используя ручную конкатенацию, но обнаружил, что есть несколько библиотек .NET, которые доступны из COM и, следовательно, из ASP Classic. Моя версия использует тот факт, что у меня есть класс StringBuilder, который является оболочкой для класса StringBuilder в .NET.

'******************************************************************************
Public Function FormatDate( sFormat, dDateValue )
'PURPOSE: To format a date with any arbitrary format
'ARGS:
'   sFormat is the defined formats as used by the .NET Framework's System.DateTimeFormatInfo.
'       Note that this format is case-sensitive.
'CALLS:
'   1. System.Text.StringBuilder class in the .NET Framework.
'EXAMPLE CALL:
'   Dim sFormatedDate
'   sFormatedDate = FormatDate( "MM/dd/yy", "1/1/1900 12:00 AM" )
'   Or
'   sFormatedDate = FormatDate( "MM/dd/yyyy", "1/1/1900 12:00 AM" )
'DESIGN NOTE:
'   This function leverages the fact that System.Text.StringBuilder is COMVisible.
'   Thus, we can call its AppendFormat function from here.
'   You can find more information about the format string parameters allowed at
'   http://msdn.microsoft.com/en-us/library/system.globalization.datetimeformatinfo.aspx

    Dim oStringBuilder
    Dim sSbFormatString
    Dim dDate

    If Not IsDate( dDateValue ) Then
        FormatDate = vbNullString
        Exit Function
    End If

    On Error Resume Next

    dDate = CDate(dDateValue)
    If Err.number <> 0 Then
        FormatDate = vbNullString
        Exit Function
    End If

    'if an empty format string is passed, then simply return
    'the value using the default shortdate format.
    If Len(sFormat & vbNullString) = 0 Then
        sSbFormatString = "{0:d}"
    Else
        sSbFormatString = "{0:" & sFormat & "}"
    End If

    Set oStringBuilder = CreateObject("System.Text.StringBuilder")
    Call oStringBuilder.AppendFormat(sSbFormatString, dDate)
    FormatDate = oStringBuilder.ToString()
    Set oStringBuilder = Nothing
End Function
'**************************************************************************
' Use this class to concatenate strings in a much more
' efficient manner than simply concatenating a string
' (strVariable = strVariable & "your new string")
Class StringBuilder
'PURPOSE: this class is designed to allow for more efficient string
'   concatenation.
'DESIGN NOTES:
'       Originally, this class built an array and used Join in the ToString
'       method. However, I later discovered that the System.Text.StringBuilder
'       class in the .NET Framework is COMVisible. That means we can simply use
'       it and all of its efficiencies rather than having to deal with
'       VBScript and its limitations.
    Private oStringBuilder

    Private Sub Class_Initialize()
        Set oStringBuilder = CreateObject("System.Text.StringBuilder")
    End Sub

    Private Sub Class_Terminate(  )
        Set oStringBuilder = Nothing
    End Sub

    Public Sub InitializeCapacity(ByVal capacity)
        On Error Resume Next
        Dim iCapacity
        iCapacity = CInt(capacity)
        If Err.number <> 0 Then Exit Sub
        oStringBuilder.Capacity = iCapacity
    End Sub

    Public Sub Clear()
        Call Class_Initialize()
    End Sub

    Public Sub Append(ByVal strValue)
        Call AppendFormat("{0}", strValue)
    End Sub

    Public Sub AppendFormat(ByVal strFormatString, ByVal strValue)
        Call oStringBuilder.AppendFormat(strFormatString, (strValue & vbNullString))
    End Sub

    'Appends the string with a trailing CrLf
    Public Sub AppendLine(ByVal strValue)
        Call Append(strValue)
        Call Append(vbCrLf)
    End Sub

    Public Property Get Length()
        Length = oStringBuilder.Length
    End Property
    Public Property Let Length( iLength )
        On Error Resume Next
        oStringBuilder.Length = CInt(iLength)
    End Property

    'Concatenate the strings by simply joining your array
    'of strings and adding no separator between elements.
    Public Function ToString()
        ToString = oStringBuilder.ToString()
    End Function
End Class

Итак, с этим классом вы можете сделать что-то вроде:

FormatDate("dd/MM/yyyy", RS("DateField"))

Обратите внимание, что переданная строка чувствительна к регистру.

EDIT Я вижу, что в какой-то момент я исправил свою функцию FormatDate, чтобы исключить использование моего класса VBScript StringBuilder, и вместо этого просто использовал класс .NET напрямую. Я оставлю там класс VBScript StringBuilder для справки на случай, если кому-то будет интересно. (Однако я поменял местами их порядок, чтобы код, показанный вверху, был более применим к проблеме).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...