我正在使用Apache commons-lang3 DateUtils.truncate(Calendar calendar, int field)方法来"切断"Calendar对象的不必要字段.现在当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>
* …Run Code Online (Sandbox Code Playgroud) 有没有办法在Java中将给定的DateString转换为Milliseconds(Epoch长格式)?示例:我想转换
public static final String date = "04/28/2016";
Run Code Online (Sandbox Code Playgroud)
到毫秒(epoch).
我有上个季度的季度结束日期让它成为30-09-20,要求是找到下一个季度的结束日期即31-12-20。我使用下面的代码来做同样的事情,但在某些情况下它会给出错误的输出。这个解决方案应该适用于所有方面。
String str = "30-09-20";
SimpleDateFormat format = new SimpleDateFormat("dd-MM-yy");
Date date = format.parse(str);
Date newDate = DateUtils.addMonths(date, 3);
System.out.println(newDate);//Dec 30 - It should be 31 Dec
Run Code Online (Sandbox Code Playgroud) 我似乎无法让这个工作,它说未知的模式字符 - "T"
无法解析日期2011-07-22T12:01:34.9455820
Date theDate = DateUtils.parseDate(notif.dateStr, new String[]{"yyyy-MM-ddTHH:mm:ss.S"});
Run Code Online (Sandbox Code Playgroud)
这也不起作用(这是我先做的,在这种情况下它只是给出了一个解析异常):
Date theDate = DateUtils.parseDate(notif.dateStr);
Run Code Online (Sandbox Code Playgroud)
我的错误在哪里?
我在尝试获取DateUtils.getRelativeTimeSpanString以返回其在Android中应该遇到的问题时遇到了严重的问题。
我在这里经历过每个类似的问题,而发布的解决方案都没有起作用或没有意义。
这是我的代码:
CharSequence relativeDate =
DateUtils.getRelativeTimeSpanString(System.currentTimeMillis(),
currentNewsItem.getTimeInMilliseconds(),
DateUtils.HOUR_IN_MILLIS, DateUtils.FORMAT_ABBREV_RELATIVE);
dateView.setText(relativeDate);
Run Code Online (Sandbox Code Playgroud)
currentNewsItem.getTimeInMilliseconds方法确实确实返回了很长的时间(例如,刚过去1521759734它看起来正确),并且getRelativeTimeSpanString将正确格式的日期字符串以“ 2018年3月23日”的格式传递给视图,因此它知道正确的日期。但是我需要它通过“ x小时前”或“ x分钟前”,而且我无法终生弄清楚为什么不是这样。
我已经检查了模拟器上的时间,并且问题出现在我的设备上,因此不是时区设置。
文档说,如果时间跨度大于7天,它将恢复为这样的日期字符串,但是我检查了过去的时间,因为旧时间已经过去,转换器网站显示这是4小时前的确切时间。此外,它显示的是正确的日期(今天),而不是小时/分钟前。
我已经尝试过将HOUR_IN_MILLIS,MINUTES_IN_MILLIS和SECONDS_IN_MILLIS常量用于第三个参数,并且尝试删除了最后一个缩写参数,但结果仍然相同。
我尝试了各种公共方法签名来尝试查找可能有效的签名,但它们都具有相同的结果。
有没有人遇到过这种情况,或者有人可以指出我要去哪里错了?非常感谢。
android android-date apache-commons-dateutils android-dateutils java-date
public static void main(String[] args){
Date date = null;
try {
date = DateUtils.parseDateStrictly("2018-03-11 01:59:00", "yyyy-MM-dd HH:mm:ss");
System.out.println(date.getTime());
date = DateUtils.parseDateStrictly("2018-03-11 02:00:00", "yyyy-MM-dd HH:mm:ss");
System.out.println(date.getTime());
}catch(Exception e) {
e.printStackTrace();
}
}
Run Code Online (Sandbox Code Playgroud)
第一个时间戳被成功解析,但第二个时间戳无法解析.org.apache.commons.lang3.time.DateUtils有错误吗?我正在使用commons-lang3-3.4.jar
1520751540000
java.text.ParseException:无法在org.apache.com上的org.apache.commons.lang3.time.DateUtils.parseDateWithLeniency(DateUtils.java:401)处解析日期:2018-03-11 02:00:00位于com.ecw.vocabulary.mapper.impl.Test.testMetoo的org.apache.commons.lang3.time.DateUtils.parseDateStrictly(DateUtils.java:321)的.lang3.time.DateUtils.parseDateStrictly(DateUtils.java:343) (Test.java:59)at com.ecw.vocabulary.mapper.impl.Test.main(Test.java:40)