2

DB/2 データベースから定期的に、日付とタイムスタンプが次のようにフォーマットされた抽出物を取得します。

2002-01-15-00.00.00.000000
2008-01-05-12.36.05.190000
9999-12-31-24.00.00.000000

部分文字列で分解するよりも、これを Excel の日付形式に変換する簡単な方法はありますか?

DB2date = DateValue(Left(a, 4) + "/" + Mid(a, 6, 2) + "/" + Mid(a, 9, 2))

ご協力いただきありがとうございます!

4

4 に答える 4

2

数式関数について話しているのか、VBA 関数について話しているのかは明確ではありません。

数式関数

文字列を必要とする DateValue 関数は使用しないでください。数値の年、月、日を想定する Date 関数を使用します。

=DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2)))

文字列としての日付がA1にあると仮定します。

VBA 関数

上記と同様の計算ですが、代わりにDateSerial関数を使用してください。

dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2)))
于 2008-10-03T10:32:16.237 に答える
1

本当に気にかけているなら、正規表現で何かを調理できると確信しています。ただし、それは「より良い」ものではなく、おそらくより悪いものです。

少し C# を許すなら (私は何年も VB に触れていないので、関数呼び出しについてはもう知りません)、次のこともできます。

DB2string = "2002-01-15-00.00.00.000000";
DB2date = DateValue(DB2string.SubString(0, 10).Replace('-', '/'));

しかし、繰り返しますが、あなたは本当に何も得ていません。現在のコードが壊れる場所の例を挙げていただけますか?

于 2008-10-03T10:19:41.300 に答える
1

VBA ではdateValue()、文字列の最初の部分を日付に変換できます。

? dateValue("2002-01-15")

    15/01/2002

したがって、あなたのためにそれを取得する正しい方法は

? dateValue(left("2002-01-15-00.00.00.000000",10))

DB2 が常に「YYYY-MM-DD」の日付を提供する限り、これは常に正しい答えを提供します。結果の形式 (dd/mm/yy、mm-ddd-yyyy など) は、コンピューターのローカル設定/セルの特定の設定によって異なります。

文字列の「時間」部分を抽出したい場合は、timeValue()最終的に仕事をするこの関数があります。

于 2008-10-03T10:41:01.007 に答える
1

時間情報を含めたい場合は、さらに行う必要があります。DateValue はそれを破棄します。
TimeValue は時間部分を秒まで評価できるため、それらを追加できます。

= DateValue(Mid(a, 1, 10)) + TimeValue(Mid(a, 12, 8))

しかし、サンプル データには別の問題があります。時間値 "00.00.00" と "24.00.00" の両方があります。
2 番目のものは TimeValue 関数をギャグするため、特殊なケースに対応するようにコーディングする必要があります。

于 2008-10-03T15:44:27.470 に答える