23

Alfresco Propertiesから取得し、指定された日付(Tue Jul 13 00:00:00 CEST 2010)を管理していて、Javaの日付に変換する必要があります...周りを見回して数百万を見つけましたさまざまな文字列から日付への変換フォームとこのページの投稿の数なので、次のようなものを試しました。

private static final DateFormat alfrescoDateFormat = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy");
Date dataRispostaDate = alfrescoDateFormat.parse(dataRisposta);

ただし、例外がスローされます(例外は(SSollevata un'eccezione durante la gestione della data:java.text.ParseException:Unparseable date: "Tue Jul 13 00:00:00 CEST 2011")です。

私は完全なコードを投稿します:

        try {
            QName currDocTypeQName = (QName) nodeService.getType(doc);
            log.error("QName:["+currDocTypeQName.toString()+"]");
            if (currDocTypeQName != null) {
                String codAtto = AlfrescoConstants.getCodAttoFromQName(currDocTypeQName.toString());
                log.error("codAtto:["+codAtto+"]");
                if (codAtto.equals(AlfrescoConstants.COD_IQT)){
                    List<ChildAssociationRef> risposteAssociate = nodeService.getChildAssocs(doc, AlfrescoConstants.QN_RISPOSTEASSOCIATE, RegexQNamePattern.MATCH_ALL);
                    for (ChildAssociationRef childAssocRef : risposteAssociate) {
                        // Vado a prendere il nodo
                        NodeRef risposta = childAssocRef.getChildRef();
                        String dataRisposta = (nodeService.getProperty(risposta, AlfrescoConstants.QN_DATA_RISPOSTA)).toString();
                        log.error("dataRisposta:["+dataRisposta+"]");
                        if (!dataRisposta.isEmpty()){
                            try {
                                Date dataDa = dmyFormat.parse(req.getParameter("dataDa"));
                                log.error("dataDa:["+dataDa.toString()+"]");
                                Date dataA = dmyFormat.parse(req.getParameter("dataA"));
                                log.error("dataA:["+dataA.toString()+"]");
                                Date dataRispostaDate = alfrescoDateFormat.parse(dataRisposta);
                                log.error("dataRispostaDate:["+dataRispostaDate.toString()+"]");

                                if (dataRispostaDate.after(dataDa) && dataRispostaDate.before(dataA)){
                                    results.add(doc);
                                    log.error("La data risposta  è compresa tra le date specificate");
                                }else{
                                    log.error("La data risposta non è compresa tra le date specificate");
                                }
                            } catch (ParseException e) {
                                log.error("Sollevata un'eccezione durante la gestione della data: " + e);
                                throw new RuntimeException("Formato data non valido");
                            }
                        }else{
                            log.error("La data risposta non è specificata");
                        }
                    }
                }else{
                    results.add(doc);
                }
            }
        } catch (Exception e) {
            log.error("Sollevata un'eccezione durante la gestione del codice atto nel webscript nicola: " + e);
        }

誰でも助けることができますか?

4

5 に答える 5

31

基本的に、問題はSimpleDateFormat(String pattern)コンストラクターを使用していることです。ここで、javadocは次のように述べています。

指定されたパターンとデフォルトロケールのデフォルトの日付フォーマットシンボルを使用してSimpleDateFormatを構築します。

そして、このコードを使おうとすると:

DateFormat osLocalizedDateFormat = new SimpleDateFormat("MMMM EEEE");
System.out.println(osLocalizedDateFormat.format(new Date()))

ロケールに基づいて月と曜日のタイトルが印刷されることに気付くでしょう。

この問題の解決策は、SimpleDateFormat(String pattern、Locale locale)コンストラクターを使用してデフォルトの日付ロケールをオーバーライドすることです。

DateFormat dateFormat = new SimpleDateFormat(
            "EEE MMM dd HH:mm:ss zzz yyyy", Locale.US);
dateFormat.parse("Tue Jul 13 00:00:00 CEST 2011");
System.out.println(dateFormat.format(new Date()));
于 2011-05-09T14:02:27.850 に答える
7
于 2018-01-14T03:28:30.233 に答える
6

あなたのコメントに基づいて、あなたのプロパティは実際にはタイプd:dateまたはd:datetimeであると思います。その場合、プロパティはすでにJavaDateオブジェクトとしてAlfrescoから返されます。だから、あなたがする必要があるのは:

  NodeRef risposta = childAssocRef.getChildRef();
  Date dataRisposta = (Date)nodeService.getProperty(risposta, AlfrescoConstants.QN_DATA_RISPOSTA);
于 2011-05-09T14:32:54.873 に答える
2

問題は、CESTがJavaがサポートするタイムゾーンではないことです。「CST」が使えます。

TimeZone用のJavadocは次のように述べています。

3文字のタイムゾーンIDJDK1.1.xとの互換性のために、他の3文字のタイムゾーンID( "PST"、 "CTT"、 "AST"など)もサポートされています。ただし、同じ略語が複数のタイムゾーンで使用されることが多いため(たとえば、「CST」は米国の中部標準時と「中国標準時」の場合があります)、Javaプラットフォームは次のいずれかのみを認識できるため、これらの使用は非推奨になります。彼ら。

3文字または4文字のタイムゾーンをサポートするには、より良い仕事をする可能性のあるJodaTimeを試してみることをお勧めします。


String dataRisposta = "Tue Jul 13 00:00:00 CST 2010";
Date dataRispostaDate = alfrescoDateFormat.parse(dataRisposta);
System.out.println(dataRispostaDate);

プリント

Tue Jul 13 07:00:00 BST 2010

String[] ids = TimeZone.getAvailableIDs();
Arrays.sort(ids);
for (String id : ids) {
    System.out.println(id);
}

プリント

...
CAT
CET
CNT
CST
CST6CDT
CTT
...
于 2011-05-09T12:48:44.213 に答える
0

同じ問題が発生したこの関数を試してください。

public String getMyDate(String myDate, String requiredFormat, String mycurrentFormat) {
    DateFormat dateFormat = new SimpleDateFormat(returnFormat);
    Date date = null;
    String returnValue = "";
    try {
        date = new SimpleDateFormat(myFormat, Locale.ENGLISH).parse(myDate);
        returnValue = dateFormat.format(date);
    } catch (ParseException e) {
        returnValue = myDate;
    }
    return returnValue;
}

例:

Wed May 06 13:01:29 EDT 2020 ie "EEE MMM dd HH:mm:sszzzyyyy"はmycurrentFormatです

4.May.2020すなわち「d.MMM.yyyy」は私のrequiredFormatです

Date date = new Date();

getMyDate(date.toString(), "d.MMM.yyyy", "EEE MMM dd HH:mm:ss zzz yyyy")
于 2020-05-06T17:24:48.370 に答える