对不起,如果标题令人困惑。让我清楚地解释一下。我需要玩几天,几个月和几年。为此,我使用日历。这是我的代码;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
int dayStart=0,monthStart=0,yearStart=0,dayFinish=0,monthFinish=0,yearFinish=0;
Calendar cal = (Calendar) Calendar.getInstance();
cal.set(Calendar.MONTH,Calendar.MAY); //SET MONTH AS MAY
cal.set(Calendar.DATE,1);
cal.set(Calendar.YEAR,2018);
monthStart=(cal.getCalendar.MONTH)+1);
dayStart=cal.get(Calendar.DATE);
yearStart=cal.get(Calendar.YEAR);
System.out.println("STARTING DAY: "+dayStart+" STARTING MONTH: "+monthStart+" STARTING YEAR: "+yearStart);
cal.add(Calendar.MONTH,6); //ADD 6 MONTHS
monthFinish = (cal.get(Calendar.MONTH)+1);
dayFinish = (cal.get(Calendar.DATE));
yearFinish = (cal.get(Calendar.YEAR));
System.out.println("FINISHING DAY: "+dayFinish+" FINISHNG MONTH: "+monthFinish+" FINISHING YEAR: "+yearFinish);
//WHAT I WANT IS printing out the days between 2 dates: 184
}
首先,我将时间设置为:1 5 2018,然后我加上6个月,时间变为1 112018。我需要将日差设为184(如果我将月份设置为1月,则应为181)是吗仅将相应的Calendar字段(日期,月,年)转换为秒或毫秒,并从(1 11 2018)中减去(1 5 2018)的毫秒值,然后将毫秒转换回天,是否有可能?有类似的问题,但我无法完全按照自己的方式找到解决方案。
答案 0 :(得分:2)
LocalDate start = LocalDate.of(2018, Month.MAY, 1);
LocalDate finish = start.plusMonths(6);
long daysBetween = ChronoUnit.DAYS.between(start, finish);
System.out.format("Days between %s and %s: %d%n", start, finish, daysBetween);
恕我直言,这很简单。和奖金,它可以正常工作。输出为:
2018-05-01至2018-11-01之间的天数:184
Calendar
类存在设计问题,现在已经过时了。因此,我建议改为使用现代Java日期和时间API java.time。 有一种方法可以正确地对Calendar
进行天数计数,但是它比您预期的要复杂得多,因此没有理由烦恼。从毫秒计算天数(这在Stack Overflow的几个答案中显示,不仅是这个问题的其他答案)有时会给出正确的结果,有时却不能。这两个问题是:(1)由于夏季时间(DST)和其他间断性,一天可能是23、24或25小时,或者介于此间隔之间甚至超出此间隔的某个数字。如果间隔中的一天少于24小时,那么从毫秒转换将导致1天太少。 (2)Calendar
(尽管其名称)也保存一天中的时间。在您的代码中,它将在添加6个月前后的一天中的同一时间举行。在其他情况下,一天中的不同时间可能会导致您得到1天的时间过少,或者在极少数情况下,导致一天的时间过长。
是的,java.time
在Android设备上运行良好。它只需要至少 Java 6 。
org.threeten.bp
和子包中导入日期和时间类。java.time
。答案 1 :(得分:1)
您可以尝试类似的操作
import java.util.*;
import java.util.concurrent.TimeUnit;
public class Calendar1 {
public static void main(String args[])
{
Calendar startDate = Calendar.getInstance();
//Setting year, month and day
startDate.set(2018, 5, 1);
Calendar endDate = Calendar.getInstance();
endDate.set(2018, 11, 1);
long end = endDate.getTimeInMillis();
long start = startDate.getTimeInMillis();
System.out.println("Time difference in days " + TimeUnit.MILLISECONDS.toDays(Math.abs(end - start)));
}
}
答案 2 :(得分:1)
您可以执行此操作。更改年份,月份和日期并在日历中进行设置。 使用java.time.temporal.ChronoUnit获得差异。 示例代码如下。
公共无效daysBetween(){
Calendar startOfMonth = Calendar.getInstance();
startOfMonth.set(Calendar.YEAR, 2018);
startOfMonth.set(Calendar.MONTH, 10);
startOfMonth.set(Calendar.DAY_OF_MONTH, 1);
Calendar endOfMonth = Calendar.getInstance();
endOfMonth.set(Calendar.YEAR, 2018);
endOfMonth.set(Calendar.MONTH, 10);
endOfMonth.set(Calendar.DAY_OF_MONTH, 30);
System.out.println(ChronoUnit.DAYS.between(startOfMonth.toInstant(),endOfMonth.toInstant()));
}