如何在Konik的ZUGFeRD库中将交货日期设置为一段时间?

时间:2016-07-10 20:34:45

标签: java java.util.date

我使用Konik's Java libraryZUGFeRD format中创建电子发票。我想将交货日期设置为一段时间(例如" 2016年第三季度和#34;)。理想情况下,我想使用自定义字符串来表示此日期。

在将ZfDate对象实例化为发票的一部分时,库需要传递Delivery对象。由于ZfDate(及其子类)基于java.util.Date,因此我根本不了解如何处理这段时间或自定义字符串。

这是一般的这个库或ZUGFeRD规范的限制吗?可能有解决方法吗?

据我所知,从(基于纸张的)发票中使用一段时间从法律角度来看(在德国)是很好的,所以以电子格式支持这个功能也会很好

3 个答案:

答案 0 :(得分:3)

java.util.Date表示即时,因此您无法用一个句点表示句点(一系列时刻)。

你有三个显而易见的选择,即期间的第一个,中间或最后一个时刻作为“即时”使用。

答案 1 :(得分:1)

警告:我熟悉Konik库,ZUGFeRD或其基本规范。但我很好奇,并且喋喋不休。

Zf…

是的,ZfDate扩展了java.util.Date课程。 ZfDate又被扩展为3个其他Zf…类。

正如Bohemian的correct Answer所说,这意味着您无法存储日期范围,因为数据类型代表时间轴上的单个时刻。但请继续阅读我发现的“发票期”。

java.time

来自java.util.Date的继承是不幸的,因为与最早版本的Java捆绑在一起的旧日期时间类现在已经遗留下来了。它们已被Java 8及更高版本中内置的java.time框架所取代。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。

java.time类包括java.util.Datejava.time.Instant的替换,以及其他3个Zf…类中的至少一个java.time.YearMonth。扩展java.time的ThreeTen-Extra项目包括YearQuarterYearWeekInterval等类,FYI。

发票数据模型

根据您的链接,确定完整的规格并不容易。但链接链接让我:

Guide for a European CORE INVOICE data model with UN/CEFACT CII Implementation Guideline - Part 2: European CORE INVOICE data model

发票期

寻找Rq024。在第15页的表格中,找到“发票期信息”的定义。

  

对于对一段时间内交付的服务或物品收费的发票,例如订阅或计量服务,核心发票可能包含有关发票适用的日期的信息。

作为该期间的一部分,它定义了一对日期,“发票期间开始日期”和“发票期间结束日期”。不幸的是我找不到任何“约会”的定义。除了这对日期之外,我也没有注意到任何一段时间的规定,但我只是快速阅读。

ISO 8601

如果您在发票中使用字符串作为符号,请查看ISO 8601标准,了解表示各种日期时间值的字符串格式。 ISO标准不是免费提供的,因此要么购买副本,要么学习this Wikipedia page中的概要。

该标准定义了一周中的一周,并为一个特定的一周提供了2016-W27等符号,并为该周的某一天提供了2016-W27-7

对于开始/结束对,请使用斜杠作为分隔符。例如:“2007-03-01T13:00:00Z / 2008-05-11T15:30:00Z”。

如果时间跨度与时间轴无关,请使用PnYnMnDTnHnMnS。例如,P3M三个月。

不幸的是,该标准没有提供季度。有些人非正式地使用带有Q字面值的ISO 8601样式,例如2016-Q1

答案 2 :(得分:1)

If you take a look at the Type Hierarchy of
ZfDate you will see 3 sub types.

Type Hierarchy of ZfDate

Those 3 types also represent the current possibilities that are allowed in ZUGFeRD.

  • Day with Code 102 with string yyyyMMdd.
  • Month of the year as Code 610 with string yyyyMM.
  • Week of the year as Code 616 with string yyyyww.

Keep in mind that having fancy dates like 'July to December 2016' in you ZUGFeRD invoice will make it difficult or impossible for other parties to automatically process the invoices. If possible keep it simple. Also don't forget that you can put this type of information on the visual representation of the invoice (pdf only part) as in most cases this information is solely intended for humans.