MyN*_*ero 7 java android calendar date
我正在尝试创建一个涵盖整整一个月的日期范围,即
[开始日期; 结束日期]
因此,我有一个参考日期,并尝试从中创建一个新的日期.我对"endDate"有疑问,因为我希望它接近一天结束时(即23:59:59).
我正在使用的代码如下:
public static Date previousMonthLastDate(Date referenceDate) {
Calendar calendar = new GregorianCalendar(TimeZone.getTimeZone("UTC"));
calendar.setTime(referenceDate);
calendar.add(Calendar.MONTH, -1); // move to the previous month
int lastDay = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH, lastDay);
// set the time to be the end of the day
calendar.set(Calendar.HOUR_OF_DAY, 23);
calendar.set(Calendar.MINUTE, 59);
calendar.set(Calendar.SECOND, 59);
return calendar.getTime();
}
Run Code Online (Sandbox Code Playgroud)
此代码在Android 模拟器上按预期工作.但是,在真实手机上运行它会给出错误的日期.因此,我认为这是某种时区问题.
在电话上,而不是说2010年8月31日,它给出了2010年9月1日.此值接缝将在将HOUR_OF_DAY设置为23的代码行之后设置.
有任何想法吗?
谢谢.
我无法回答为什么会发生这种情况,但您是否尝试将其设置为下个月的第一天并减去一秒/毫秒?
calendar.set(Calendar.DAY_OF_MONTH, 1);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
calendar.add(Calendar.MILLISECOND, -1);
Run Code Online (Sandbox Code Playgroud)
我在做类似的事情:
使用此代码,我在间隔中设置日期:
Date day = new Date()
Run Code Online (Sandbox Code Playgroud)
使用此代码,我得到间隔:
Calendar startDate = Calendar.getInstance();
Calendar endDate = Calendar.getInstance();
// Set time
startDate.setTime(day);
endDate.setTime(day);
startDate.set(Calendar.DAY_OF_MONTH, 1);
startDate.set(Calendar.HOUR_OF_DAY, 0);
startDate.set(Calendar.MINUTE, 0);
startDate.set(Calendar.SECOND, 0);
startDate.set(Calendar.MILLISECOND, 0);
endDate.set(Calendar.DAY_OF_MONTH, endDate.getActualMaximum(Calendar.DAY_OF_MONTH));
endDate.set(Calendar.HOUR_OF_DAY, 23);
endDate.set(Calendar.MINUTE, 59);
endDate.set(Calendar.SECOND, 59);
Run Code Online (Sandbox Code Playgroud)
如果您希望时区取决于手机设置,则不应在创建日历时强制使用时区。只需使用:
Calendar calendar = Calendar.getInstance();
Run Code Online (Sandbox Code Playgroud)