我使用Konik's Java library在ZUGFeRD format中创建电子发票。我想将交货日期设置为一段时间(例如" 2016年第三季度和#34;)。理想情况下,我想使用自定义字符串来表示此日期。
在将ZfDate
对象实例化为发票的一部分时,库需要传递Delivery
对象。由于ZfDate
(及其子类)基于java.util.Date
,因此我根本不了解如何处理这段时间或自定义字符串。
这是一般的这个库或ZUGFeRD规范的限制吗?可能有解决方法吗?
据我所知,从(基于纸张的)发票中使用一段时间从法律角度来看(在德国)是很好的,所以以电子格式支持这个功能也会很好
答案 0 :(得分:3)
java.util.Date
表示即时,因此您无法用一个句点表示句点(一系列时刻)。
你有三个显而易见的选择,即期间的第一个,中间或最后一个时刻作为“即时”使用。
答案 1 :(得分:1)
警告:我不熟悉Konik库,ZUGFeRD或其基本规范。但我很好奇,并且喋喋不休。
Zf…
类是的,ZfDate
扩展了java.util.Date
课程。 ZfDate
又被扩展为3个其他Zf…
类。
正如Bohemian的correct Answer所说,这意味着您无法存储日期范围,因为数据类型代表时间轴上的单个时刻。但请继续阅读我发现的“发票期”。
来自java.util.Date
的继承是不幸的,因为与最早版本的Java捆绑在一起的旧日期时间类现在已经遗留下来了。它们已被Java 8及更高版本中内置的java.time框架所取代。见Oracle Tutorial。许多java.time功能都被反向移植到Java 6& ThreeTen-Backport中的7,并在ThreeTenABP中进一步适应Android。
java.time类包括java.util.Date
,java.time.Instant
的替换,以及其他3个Zf…
类中的至少一个java.time.YearMonth
。扩展java.time的ThreeTen-Extra
项目包括YearQuarter
,YearWeek
,Interval
等类,FYI。
根据您的链接,确定完整的规格并不容易。但链接链接让我:
寻找Rq024
。在第15页的表格中,找到“发票期信息”的定义。
对于对一段时间内交付的服务或物品收费的发票,例如订阅或计量服务,核心发票可能包含有关发票适用的日期的信息。
作为该期间的一部分,它定义了一对日期,“发票期间开始日期”和“发票期间结束日期”。不幸的是我找不到任何“约会”的定义。除了这对日期之外,我也没有注意到任何一段时间的规定,但我只是快速阅读。
如果您在发票中使用字符串作为符号,请查看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.
Those 3 types also represent the current possibilities that are allowed in ZUGFeRD.
102
with string yyyyMMdd
. 610
with string yyyyMM
. 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.