如何将交货日期设置为 Konik 的 ZUGFeRD 库中的某个时间段?
How can I set the delivery date to a time period in Konik's ZUGFeRD library?
我用Konik's Java library for creating electronic invoices in ZUGFeRD format。我想将交货日期设置为一段时间(例如"Q3 2016")。理想情况下,我想使用自定义字符串来表示此日期。
在将 Delivery
对象实例化为我的发票的一部分时,库需要传递一个 ZfDate
对象。由于 ZfDate
(及其子类)基于 java.util.Date
,因此我根本看不出如何在这种情况下处理时间段或自定义字符串。
这是这个库的限制还是 ZUGFeRD 规范的一般限制?可能有解决方法吗?
据我所知,从法律的角度来看(在德国),在(纸质)发票中使用时间段是可以的,因此电子格式支持此功能会很好还有。
一个 java.util.Date
代表一个瞬间,所以你不能用一个代表一个时期(瞬间的范围)。
三个明显的选择是周期的第一个、中间或最后一个瞬间作为 "the" 瞬间使用。
警告:我不 熟悉 Konik 库、ZUGFeRD 或其基础规范。不过我很好奇,就随便逛了一下。
Zf…
classes
是的,ZfDate
extends the java.util.Date
class。 ZfDate
依次扩展为其他3个Zf…
classes.
正如 Bohemian 的 所说,这意味着您不能存储日期范围,因为该数据类型表示时间轴上的单个时刻。但是请继续阅读我发现的“发票期”。
java.time
从 java.util.Date
继承是不幸的,因为与 Java 的最早版本捆绑在一起的旧日期时间 classes 现在是遗留的。它们已被 java.time framework built into Java 8 and later. See Oracle Tutorial. Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP.
取代
java.time classes 包括 java.util.Date
、java.time.Instant
, as well as at least 1 of the 3 other Zf…
classes, java.time.YearMonth
. The ThreeTen-Extra
project that extends java.time includes classes for YearQuarter
, YearWeek
, Interval
等的替换,仅供参考。
发票数据模型
按照您的链接,确定完整的确切规格并不容易。但是指向链接的链接将我带到了:
带有 UN/CEFACT CII 实施指南的欧洲 CORE INVOICE 数据模型指南 - 第 2 部分:欧洲 CORE INVOICE 数据模型
发票期
寻找 Rq024
。在第 15 页的 table 中,找到“发票期信息”的定义。
For invoices that charge for services or items delivered over a time period, such as subscriptions or metered services, a Core Invoice may contain information about the date period to which the invoice applies.
作为该期间的一部分,它定义了一对日期,“发票期间开始日期”和“发票期间结束日期”。不幸的是,我找不到“日期”的任何定义。除了这对日期之外,我也没有注意到任何时间跨度的规定,但我只是快速浏览了一下。
ISO 8601
如果您使用字符串作为发票中的符号,请查看 ISO 8601 标准以了解表示各种日期时间值的字符串格式。 ISO 标准不是免费提供的,因此要么购买副本,要么研究 this Wikipedia page.
中的概要
该标准定义了一年中的一周,并提供了诸如 2016-W27
表示某一特定周和 2016-W27-7
表示该周特定日期的符号。
对于 start/end 对,使用斜杠作为分隔符。例如:“2007-03-01T13:00:00Z/2008-05-11T15:30:00Z”。
对于与时间轴无关的时间跨度,请使用 PnYnMnDTnHnMnS
。例如,P3M
三个月。
遗憾的是,该标准不提供宿舍。有些人非正式地使用带有 Q
文字的 ISO 8601 样式,例如 2016-Q1
.
如果你看一下
的类型层次结构
ZfDate 你会看到 3 个子类型。
这3种类型也代表了ZUGFeRD目前允许的可能性。
- 日期代码
102
字符串 yyyyMMdd
。
- 一年中的月份,代码为
610
,字符串为 yyyyMM
。
- 一年中的第几周,代码为
616
,字符串为 yyyyww
。
请记住,在您的 ZUGFeRD 发票中使用像 'July to December 2016' 这样的奇特日期会使其他方难以或不可能自动处理发票。如果可能的话,保持简单。另外不要忘记,您可以将此类信息放在发票的可视化表示中(仅 pdf 部分),因为在大多数情况下,此信息仅供人类使用。
我用Konik's Java library for creating electronic invoices in ZUGFeRD format。我想将交货日期设置为一段时间(例如"Q3 2016")。理想情况下,我想使用自定义字符串来表示此日期。
在将 Delivery
对象实例化为我的发票的一部分时,库需要传递一个 ZfDate
对象。由于 ZfDate
(及其子类)基于 java.util.Date
,因此我根本看不出如何在这种情况下处理时间段或自定义字符串。
这是这个库的限制还是 ZUGFeRD 规范的一般限制?可能有解决方法吗?
据我所知,从法律的角度来看(在德国),在(纸质)发票中使用时间段是可以的,因此电子格式支持此功能会很好还有。
一个 java.util.Date
代表一个瞬间,所以你不能用一个代表一个时期(瞬间的范围)。
三个明显的选择是周期的第一个、中间或最后一个瞬间作为 "the" 瞬间使用。
警告:我不 熟悉 Konik 库、ZUGFeRD 或其基础规范。不过我很好奇,就随便逛了一下。
Zf…
classes
是的,ZfDate
extends the java.util.Date
class。 ZfDate
依次扩展为其他3个Zf…
classes.
正如 Bohemian 的
java.time
从 java.util.Date
继承是不幸的,因为与 Java 的最早版本捆绑在一起的旧日期时间 classes 现在是遗留的。它们已被 java.time framework built into Java 8 and later. See Oracle Tutorial. Much of the java.time functionality is back-ported to Java 6 & 7 in ThreeTen-Backport and further adapted to Android in ThreeTenABP.
java.time classes 包括 java.util.Date
、java.time.Instant
, as well as at least 1 of the 3 other Zf…
classes, java.time.YearMonth
. The ThreeTen-Extra
project that extends java.time includes classes for YearQuarter
, YearWeek
, Interval
等的替换,仅供参考。
发票数据模型
按照您的链接,确定完整的确切规格并不容易。但是指向链接的链接将我带到了:
带有 UN/CEFACT CII 实施指南的欧洲 CORE INVOICE 数据模型指南 - 第 2 部分:欧洲 CORE INVOICE 数据模型
发票期
寻找 Rq024
。在第 15 页的 table 中,找到“发票期信息”的定义。
For invoices that charge for services or items delivered over a time period, such as subscriptions or metered services, a Core Invoice may contain information about the date period to which the invoice applies.
作为该期间的一部分,它定义了一对日期,“发票期间开始日期”和“发票期间结束日期”。不幸的是,我找不到“日期”的任何定义。除了这对日期之外,我也没有注意到任何时间跨度的规定,但我只是快速浏览了一下。
ISO 8601
如果您使用字符串作为发票中的符号,请查看 ISO 8601 标准以了解表示各种日期时间值的字符串格式。 ISO 标准不是免费提供的,因此要么购买副本,要么研究 this Wikipedia page.
中的概要该标准定义了一年中的一周,并提供了诸如 2016-W27
表示某一特定周和 2016-W27-7
表示该周特定日期的符号。
对于 start/end 对,使用斜杠作为分隔符。例如:“2007-03-01T13:00:00Z/2008-05-11T15:30:00Z”。
对于与时间轴无关的时间跨度,请使用 PnYnMnDTnHnMnS
。例如,P3M
三个月。
遗憾的是,该标准不提供宿舍。有些人非正式地使用带有 Q
文字的 ISO 8601 样式,例如 2016-Q1
.
如果你看一下
的类型层次结构
ZfDate 你会看到 3 个子类型。
这3种类型也代表了ZUGFeRD目前允许的可能性。
- 日期代码
102
字符串yyyyMMdd
。 - 一年中的月份,代码为
610
,字符串为yyyyMM
。 - 一年中的第几周,代码为
616
,字符串为yyyyww
。
请记住,在您的 ZUGFeRD 发票中使用像 'July to December 2016' 这样的奇特日期会使其他方难以或不可能自动处理发票。如果可能的话,保持简单。另外不要忘记,您可以将此类信息放在发票的可视化表示中(仅 pdf 部分),因为在大多数情况下,此信息仅供人类使用。