質問

して、VB6ースのアプリケーション(内のCOMコンポーネントを利用しCDate()を文字列とキャストが日付、保存の改善に取り組んでいます。●

よしたい場合は、あらかの話 dd/MM/yy または MM/dd/yy 例えば、変更しておりますの地域設定のアイデンティティのユーザーのCOM願います。(現在にい 厄hack.)

した日付フォーマット文字列に使用されるフォーマットのすべての出力には、ることが想定される日

このた.純て使用 DateTime.ParseExact および使用することもあるらしく笑っている。呼び出しになCOMオブジェクト書きます。純この目的は、オプションとなっています。はありませるためには、より良いオプション、黒魔法の形式のコマンドは、再利用可能な機能tokenizesの日によってはフォーマット文字列などが有ります。

役に立ちましたか?

解決

それは50で、「/」や窓のYY年として区切り文字をハードコードしても

これは、近くにある必要があります:

Private Function ParseDate(ByVal DateString As String, _
                           ByVal DatePattern As String) As Date
    'DateString:  i/j/k formatting.
    'DatePattern: i/j/k formatting, each to be:
    '               M or MM for month position.
    '               D or DD for day position.
    '               YY or YYYY for year position, if YY
    '                 then century windowed at 50.
    Dim strStringParts() As String
    Dim strPatternParts() As String
    Dim intPart As Integer, intScore As Integer
    Dim intMonth As Integer, intDay As Integer, intYear As Integer
    Const DELIM As String = "/"
    Const YYWINDOW As Integer = 50

    strStringParts = Split(DateString, DELIM)
    strPatternParts = Split(UCase$(DatePattern), DELIM)
    For intPart = 0 To UBound(strStringParts)
        If intPart > UBound(strPatternParts) Then
            Err.Raise 5, "ParseDate"
        End If
        Select Case strPatternParts(intPart)
            Case "M", "MM"
                intMonth = CInt(strStringParts(intPart))
                intScore = intScore Or &H1
            Case "D", "DD"
                intDay = CInt(strStringParts(intPart))
                intScore = intScore Or &H2
            Case "YY"
                intYear = CInt(strStringParts(intPart))
                If 0 > intYear Or intYear > 99 Then
                    Err.Raise 5, "ParseDate"
                End If
                intYear = intYear + IIf(intYear < YYWINDOW, 2000, 1900)
                intScore = intScore Or &H4
            Case "YYYY"
                intYear = CInt(strStringParts(intPart))
                If 100 > intYear Or intYear > 9999 Then
                    Err.Raise 5, "ParseDate"
                End If
                intScore = intScore Or &H4
            Case Else
                Err.Raise 5, "ParseDate"
        End Select
    Next
    If intScore = &H7 Then
        ParseDate = DateSerial(intYear, intMonth, intDay)
    Else
        Err.Raise 5, "ParseDate"
    End If
End Function

の検証は完璧ではないかもしれないが、それは近くにあるべき。それは悪い入力の上、「無効なプロシージャ呼び出しまたは引数(エラー5)」をスローします。

他のヒント

見て、簡単に言うことだ螺.合わせフリーフォームから入力したweb、共に暮らしている現状では世界中の人々の形式の日とは異なります。そのた 多くの ウェブサイトにポップアップカレンダーなどの、ユーザー入力します。いまいにならない。なお返事ありがとうございます。,.当期純に上書きできなぜ自分のユーザの意図り、他の図書館があります。

Fwiw、コードはマイクを掲載しは絶対にVB6.お使いいただくことによっていうVB.NET?ロサンゼルス生まれの日付/時刻日付変数を表示することができたしたいと形式().それが簡単です。

いることが強く示唆する)からの入力が明確にして、ユーザーに伝えはどのような形式まで、生うに入力します。すべてとは可能でした誤解され、問題とならないかもしれませんどの形式のユーザーに資するデータを提供す。(その場合、もとでお困りの理解などの問題は解釈でClassicVB-。)

DateAddは、正しい形式で入力と出力の多種多様を受け付ける。

ThisLine =  "Tuesday, September 04, 2012 2:02 PM"

i = InStr(ThisLine, ",")  ' get rid of the leading day

If i > 0 Then
     TempResult = Trim(Right$(ThisLine, Len(ThisLine) - i))
end if

TempResult = DateAdd("s", 0, TempResult)

あなたがウェブからの入力を取っている他の回答の一つにコメントで言及します。

その場合は、

内容はクリエイティブコモンズの下でライセンスされています。

著作権違反がある場合は、でお問い合わせください info@generacodice.com コンテンツの削除をリクエストします。

scroll top