您可能必须从头开始编写代码。可能有一个您可以转换的 Java 库,但似乎这种类型的功能现在是学术界的东西,而不是在各个地方生产的东西。最后,您也许可以使用学术性的东西,但您可能必须根据需要编写自己的代码。
为了实现最大的灵活性,我会将日期的每个部分存储在单独的可为空字段中,并使用一个值指示第一个空字段的不确定性。
class UncertainDate
{
public byte? Millennium { get; set; }
public byte? Century { get; set; }
public byte? Decade { get; set; }
public byte? Year { get; set; }
public byte? Month { get; set; }
public byte? Day { get; set; }
// more as you see fit
public decimal Uncertainty { get; set; }
}
例如,“2000 年第一季度”将表示为:
var d = new UncertainDate() { Millennium = 2, Century = 0, Decade = 0, Year = 0, Uncertainty = 0.25m };
这给您留下了很长的路要走,直到解析字符串输入和给出字符串输出,但它使比较容易(按顺序比较每个字段,首先或最低的不确定性丢失)。
您还可以对不确定性使用枚举,可能是 等值FirstQuarter, FirstHalf, Early, Late, ThirdQuarter
。十进制使相对比较容易,但更难转换为“下半年”之类的东西(即 0.75 是“下半年”还是“第三季度”?)
作为参考,有人问过类似的问题。