1

ToDate() を使用して文字列を日時オブジェクトに変換しようとする Pig スクリプトを使用しています。これが私が扱っているサンプル文字列ですFri Nov 01 12:30:19 EDT 2013

ToDate(userstring, format)を使用して日時オブジェクトに変換しようとすると、無効な形式を使用していると言われます...

B = FOREACH A GENERATE ToDate(date,'EEE MMM dd HH:mm:ss z yyyy') AS datetime;
ERROR org.apache.pig.tools.grunt.GruntParser - ERROR 2999: Unexpected internal error. Invalid format: "Fri Nov 01 12:30:19 EDT 2013" is malformed at "EDT 2013"

その理由は、Pig が Joda Time を使用しており、EDT が有効な Joda Time タイム ゾーンではないためだと強く考えています。問題ありません。ドキュメントによると、Pig は Simple Date Format を使用しており、文字列をエスケープできます (最初のを参照)。それができないように見えることを除いて...

ToDate(date,"EEE MMM dd HH:mm:ss 'EDT' yyyy") <-- unexpected character '"'
ToDate(date,'"EEE MMM dd HH:mm:ss 'EDT' yyyy"') <-- expecting semicolon error
ToDate(date,'EEE MMM dd HH:mm:ss 'EDT' yyyy') <-- expecting semicolon
ToDate(date,'EEE MMM dd HH:mm:ss \'EDT\' yyyy') <--  malformed at " EDT 2013"
ToDate(date,'EEE MMM dd HH:mm:ss "EDT" yyyy') <--  Illegal pattern component: T

等々。ピッグに「EDT」文字を無視させようとして、引用符とエスケープ文字のすべての組み合わせを試したと確信していますが、何もうまくいかないようです(上記のほとんどは暗闇で撮影しただけです)。

バグレポートまたはこれに関する何かを開く前に、2 つの質問があります。1) EDT がサポートされているタイムゾーンではないため、これが失敗しているのは正しいですか? それとも私のパターンがどこか間違っていますか?2) EDT が原因で失敗している場合、それらの文字をエスケープする方法はありますか、またはこのステップで何か間違ったことをしていますか?

4

1 に答える 1

0

EDT は JODA では解析できませんが、JDK では解析できます。EDT はあいまいで、異なる値を持つことができます。

この文字列を DateTime に解析するには、StackOverflow パターンに関するこの他の質問に興味があるはずです

于 2013-11-08T15:24:49.963 に答える