Merge pull request #1017 from pgjacobs/zugferddateformat-concurrency

Concurrency problems in ZUGFeRDDateFormat
This commit is contained in:
Jochen Staerk
2026-02-04 13:20:40 +01:00
committed by GitHub

View File

@@ -2,23 +2,24 @@ package org.mustangproject.ZUGFeRD;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.function.Supplier;
import org.mustangproject.ZUGFeRD.model.DateTimeTypeConstants; import org.mustangproject.ZUGFeRD.model.DateTimeTypeConstants;
public enum ZUGFeRDDateFormat { public enum ZUGFeRDDateFormat {
MONTH_OF_YEAR(DateTimeTypeConstants.MONTH, new SimpleDateFormat("yyyyMM")), MONTH_OF_YEAR(DateTimeTypeConstants.MONTH, () -> new SimpleDateFormat("yyyyMM")),
WEEK_OF_YEAR(DateTimeTypeConstants.WEEK, new SimpleDateFormat("yyyyww")), WEEK_OF_YEAR(DateTimeTypeConstants.WEEK, () -> new SimpleDateFormat("yyyyww")),
DATE(DateTimeTypeConstants.DATE, new SimpleDateFormat("yyyyMMdd")); DATE(DateTimeTypeConstants.DATE, () -> new SimpleDateFormat("yyyyMMdd"));
private String dateTimeType; private String dateTimeType;
private SimpleDateFormat formatter; private ThreadLocal<SimpleDateFormat> formatter;
private static final String QDT_FORMAT = "<qdt:DateTimeString format=\"%s\">%s</qdt:DateTimeString>"; private static final String QDT_FORMAT = "<qdt:DateTimeString format=\"%s\">%s</qdt:DateTimeString>";
private static final String UDT_FORMAT = "<udt:DateTimeString format=\"%s\">%s</udt:DateTimeString>"; private static final String UDT_FORMAT = "<udt:DateTimeString format=\"%s\">%s</udt:DateTimeString>";
private ZUGFeRDDateFormat(String dateTimeType, SimpleDateFormat formatter) { private ZUGFeRDDateFormat(String dateTimeType, Supplier<SimpleDateFormat> formatter) {
this.dateTimeType = dateTimeType; this.dateTimeType = dateTimeType;
this.formatter = formatter; this.formatter = ThreadLocal.withInitial(formatter);
} }
public String getDateTimeType() { public String getDateTimeType() {
@@ -26,7 +27,7 @@ public enum ZUGFeRDDateFormat {
} }
public SimpleDateFormat getFormatter() { public SimpleDateFormat getFormatter() {
return formatter; return formatter.get();
} }
public String simpleFormat(Date date){ public String simpleFormat(Date date){