0

「sTemp」という文字列変数として日付 (2012 年 11 月 1 日) を保存しています。この日付を yyyyMMdd の形式で文字列変数 LessOfFiveDates に割り当てたいと考えています。次のコードのバリエーションを試してみましたが、うまくいきません。

これを再フォーマットして、目的の出力を作成するにはどうすればよいですか?

If IsDate(sTemp) Then
    dtTemp = CDate(sTemp)
    LessOfFiveDates = CStr(Format(dtTemp, "yyyyMMdd"))
Else
4

3 に答える 3

3

あなたは独自のソリューションを提供しました。

他の質問では、エレガントなソリューションを求めました。この問題に対する洗練された解決策は、dotnet StringBuilder オブジェクトを使用することです。このオブジェクトを使用すると、より柔軟にフォーマットを設定できます。これはコードではなく文字列で実装されるため、面倒な設定を行うことなくフォーマットを追加できます。
次に、stringbuilder はシステム ロケールに基づいて日付を使用します。これは、日付と時刻の表示設定が異なるシステムでスクリプトを実行する場合に便利です。

Dim sb : Set sb = createobject("System.Text.StringBuilder")
Dim d : d = "5/6/2007"

If isDate(d) Then
    call sb.AppendFormat("{0:yyyyMMdd}", cdate(d))
    LessOfFiveDates = sb.ToString()
End If
于 2012-10-29T15:54:56.763 に答える
1

このコードを使用して動作するようにしました:

If IsDate(sTemp) Then
    LessOfFiveDates = CStr(Year(sTemp) & Right("00" & Month(sTemp), 2) & Right("00" & Day(sTemp), 2))
Else
于 2012-10-26T16:09:35.857 に答える
0

Visual Studio 6.0 (または VB6 などのサブ製品) の開発者ライセンスを持っている場合は、Format().Net の極端なオーバーヘッドなしで VBScript で関数を取得する簡単な方法があります。

'Requires msstdfmt.dll, part of Visual Studio 6.0 and
'not meant for general redistribution.
Option Explicit

Class Formatter
    Private SDFMT, RS

    Private Sub Class_Initialize()
        Set SDFMT = CreateObject("MSSTDFMT.StdDataFormat")
        Set RS = CreateObject("ADODB.Recordset")
        With RS
            .Fields.Append "V", 12 'adVariant.
            .Open
            .AddNew
            Set .Fields(0).DataFormat = SDFMT
        End With
    End Sub

    Private Sub Class_Terminate()
        RS.Close
    End Sub

    Public Function Format(ByVal Value, ByVal Style)
        SDFMT.Format = Style
        With RS.Fields(0)
            .Value = Value
            Format = .Value
        End With
    End Function
End Class

Dim FMT

Set FMT = New Formatter

MsgBox FMT.Format(Now(), "yyyy-mmm-dd hh:nn:ss")
MsgBox FMT.Format(123456.789, "###,##0.00")

ただし、通常、そのような完全な汎用性は必要なく、既存の VBScript 操作を使用して必要な結果を得ることができます。

Option Explicit

Private Function ZF2(ByVal Num)
    ZF2 = Right("0" & CStr(Num), 2)
End Function

Private Function DtFormat(ByVal Dt)
    DtFormat = CStr(Year(Dt)) & ZF2(Month(Dt)) & ZF2(Day(Dt))
End Function

MsgBox DtFormat(#3/11/2012#)

もちろん、String 値を Date 値として使用しようとするときに遭遇する危険性については何も扱っていません。これらは、文字列で Universal Date Format (つまり、US レイアウト: MM/DD/YYYY) を慎重に使用し、暗黙的な変換に依存しない限り、エラーが発生する可能性があります。CDate() 関数はロケールに対応しており、Universal 形式の日付が与えられた場合、偽の結果を生成する可能性があります。

于 2012-10-30T13:23:37.703 に答える