java - Apache DateUtils截断为WEEK

我使用apache commons-lang3DateUtils.truncate(Calendar calendar, int field)方法来“切断”日历对象不必要的字段。现在,当field参数得到Calendar.WEEK_OF_MONTH的值时,它抛出了一个
java.lang.IllegalArgumentException: The field 4 is not supported
truncate()方法的文档说明:

/**
 * <p>Truncates a date, leaving the field specified as the most
 * significant field.</p>
 *
 * <p>For example, if you had the date-time of 28 Mar 2002
 * 13:45:01.231, if you passed with HOUR, it would return 28 Mar
 * 2002 13:00:00.000.  If this was passed with MONTH, it would
 * return 1 Mar 2002 0:00:00.000.</p>
 * 
 * @param date  the date to work with, not null
 * @param field  the field from {@code Calendar} or <code>SEMI_MONTH</code>
 * @return the different truncated date, not null
 * @throws IllegalArgumentException if the date is <code>null</code>
 * @throws ArithmeticException if the year is over 280 million
 */

所以我认为这是可行的,但显然没有。有没有办法用DATUTILS截断一周的第一天的日期?
更新:
我查阅了源代码,发现modify()方法(tuncate()在内部使用),迭代一组预定义字段来找到给定的参数。现在这些字段是:
private static final int[][] fields = {
        {Calendar.MILLISECOND},
        {Calendar.SECOND},
        {Calendar.MINUTE},
        {Calendar.HOUR_OF_DAY, Calendar.HOUR},
        {Calendar.DATE, Calendar.DAY_OF_MONTH, Calendar.AM_PM 
            /* Calendar.DAY_OF_YEAR, Calendar.DAY_OF_WEEK, Calendar.DAY_OF_WEEK_IN_MONTH */
        },
        {Calendar.MONTH, DateUtils.SEMI_MONTH},
        {Calendar.YEAR},
        {Calendar.ERA}};

正如我们所看到的,与Calendar的week-ish字段没有任何关系,所以我想我必须手动执行此操作…欢迎任何其他想法/建议!

最佳答案

以合理的方式缩短一周是不可能的。考虑以下日期:

2014-11-01 12:01:55

2014-11-01 12:01:00 // truncate minute
2014-11-01 00:00:00 // truncate day
2014-11-00 00:00:00 // truncate month

原来的日期是星期六。那么,在这种情况下,周截断意味着什么?我们应该截断前一个星期一吗?如果是这样,那就是:
2014-10-27 00:00:00 // truncate week?

我觉得这不对。我们已经改变了这个月的情况,有时甚至一年都会改变。如果您能想出一个合理的方法来描述这个(以及一些用例),请file an issue我们将对此进行研究。但我觉得它是一个没有意义的截断字段。
在这里您可能会发现一些原始问题的想法:

本文翻译自 https://stackoverflow.com/questions/26672030/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。

标签 java apache-commons-lang apache-commons-dateutils


相关文章:

java - 安全地解析数字并且敏感地区域化

java - apache lang DateUtil使用日期格式失败

java - 通过平方求幂(获得乘法数)

java - 应用程序空闲时的连接超时[重复]

java - 编译离子项目出了点问题?

java - 使用JDBC执行INSERT IGNORE后获得警告计数

java - 无法使用Apache Commons Lang将双精度数组转换为String

android - 项目导入到Eclipse时出现NoClassDefFoundError?