我的日期格式如下: - dd。 - dd.MM.yyyy
根据我希望从日期和日期收到的这些信息。
伪代码中的天真实现是:
这个解决方案大部分时间都可能有效,但感觉相当尴尬。没有更好的解决方案吗?
答案 0 :(得分:0)
我建议你检查一下包
...
<p:dataTable var="convert"
value="#{convertirDeviseCtr.listeDevise}" style="width:70%"
id="convertir" selection="#{someController.selectionProperty}">
...
特别是以下课程
<p:dataTable>
答案 1 :(得分:0)
java.time框架内置于Java 8及更高版本中。大部分功能都被后端移植到Java 6&amp; 7和Android。
我在这里提供了一些示例代码,但未经测试 - 从不运行。应该让你朝着正确的方向前进。
这个问题有两个棘手的部分:
31
放到4月份。如果您的输入数据始终是干净且有效的,并且下面的算法是正确的,那么这应该是一个非问题。不过,我肯定会在下面的示例代码中添加一些异常捕获的代码来捕获任何形成无效日期的尝试。我将跳过字符串拆分部分,并假设您有第一部分的数字(日期)和第二部分的日期字符串。
long dayOfMonth = Long.longValue( "31" );
该日期不在standard format,因此我们必须指定formatting pattern。 LocalDate
表示没有时间且没有时区的仅限日期的值。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd.MM.yyyy" );
LocalDate stop = LocalDate.parse( "21.05.2016" , formatter );
我们可以提取比较日期。
LocalDate start = null;
int d = localDate.getDayOfMonth();
进行比较。
if( dayOfMonth >=d ) { // If start is in previous month…
start = stop.minusMonths( 1 ).withDayOfMonth( dayOfMonth );
} else if (dayOfMonth < d ) { // If start is in same month…
start = stop.withDayOfMonth( dayOfMonth );
} else {
// FIXME: handle impossible condition as error. The 'if' statements are flawed.
}
顺便说一下,这个输入数据的格式很笨拙,而且坦率地说是愚蠢的。这种宝贵的“聪明”创造了额外的工作,给了混乱和错误的机会,在没有任何好处的情况下完全没有必要,并且让我疯狂。如果您对此输入数据有任何控制权,我强烈建议您进行两项可能的更改。
首先,如果在您的应用中交换数据,请不要使用字符串。使用对象。上面你已经看到了LocalDate
对象。你可以传递那些。甚至可以定义自己的类LocalDateRange
来容纳一对LocalDate
个对象。或者,请参阅this Question,尤其是this Answer,其中涉及使用Google Guava类Range
来保存LocalDate
个对象。
其次,当您必须将日期时间值序列化为字符串时,请使用标准ISO 8601格式。这种用法很简单,因为java.time类在解析/生成字符串时默认使用这些格式。仅限日期的值应为YYYY-MM-DD顺序。 date range interval是一对与斜杠(SOLIDUS)匹配的字符串,或者当斜杠不合适时(例如,与Unix相关的文件系统中的文件或文件夹命名)的一对连字符。