如何在Android中获取开始日期和结束日期?
我需要帮助获取当年开始和结束日期,去年和明年。如何在Android中获取开始日期和结束日期?
以下是我的代码:这段代码在月份可以正常工作,我可以修改它吗?
注意:此代码仅用于举例。
protected void getDataByMonths(int currentDayOfMonth) {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month;
if (currentDayOfMonth >= 2) {
month = calendar.get(Calendar.MONTH) + 1;
} else {
month = calendar.get(Calendar.MONTH) - currentDayOfMonth;
}
int day = 1;
calendar.set(year, month, day);
DateFormat df = new SimpleDateFormat("MM/dd/yyyy");
int numOfDaysInMonth = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
String firstday = String.valueOf(df.format(calendar.getTime()));
calendar.add(Calendar.DAY_OF_MONTH, numOfDaysInMonth - 1);
String lastday = String.valueOf(df.format(calendar.getTime()));
String result = getButtonName(button) + " From :" + getDateInMonthFormat(firstday) + " " + "To :" + getDateInMonthFormat(lastday);
finalcontacts = mySqliteDBhelper.getContactsBetweenRange(button, getDateInMilliseconds(firstday), getDateInMilliseconds(lastday));
finalstatus.setText(result);
}
检查:
public static String GetYearSlot(int option,String inputDate)
{
SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy",java.util.Locale.getDefault());
Date myDate = null;
try
{
myDate = sdf.parse(inputDate);
}
catch(Exception ex)
{
ex.printStackTrace();
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(myDate);
calendar.add(Calendar.YEAR, option);
calendar.set(Calendar.DAY_OF_YEAR, 1);
Date YearFirstDay = calendar.getTime();
calendar.set(Calendar.MONTH, 11);
calendar.set(Calendar.DAY_OF_MONTH, 31);
Date YearLastDay = calendar.getTime();
return sdf.format(YearFirstDay)+"-"+sdf.format(YearLastDay);
}
如何使用:
GetYearSlot(1,FROM日期):它可以让你从你通过的日期在明年(输入1)
GetYearSlot(0,fromDate):从您通过的日期开始计算当年(输入0)
GetYearS很多(-1,FROM日期):它给你上一年度之日起您传递(输入-1)
假设你不能使用Java 8
,这里是如何能够做到:
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
// Create first day of year
Calendar firstDayOfCurrentYear = Calendar.getInstance();
firstDayOfCurrentYear.set(Calendar.DATE, 1);
firstDayOfCurrentYear.set(Calendar.MONTH, 0);
System.out.println(df.format(firstDayOfCurrentYear.getTime()));
// Create last day of year
Calendar lastDayOfCurrentYear = Calendar.getInstance();
lastDayOfCurrentYear.set(Calendar.DATE, 31);
lastDayOfCurrentYear.set(Calendar.MONTH, 11);
System.out.println(df.format(lastDayOfCurrentYear.getTime()));
// Create first day of next year
Calendar firstDayOfNextYear = Calendar.getInstance();
firstDayOfNextYear.add(Calendar.YEAR, 1);
firstDayOfNextYear.set(Calendar.DATE, 1);
firstDayOfNextYear.set(Calendar.MONTH, 0);
System.out.println(df.format(firstDayOfNextYear.getTime()));
// Create last day of next year
Calendar lastDayOfNextYear = Calendar.getInstance();
lastDayOfNextYear.add(Calendar.YEAR, 1);
lastDayOfNextYear.set(Calendar.DATE, 31);
lastDayOfNextYear.set(Calendar.MONTH, 11);
System.out.println(df.format(lastDayOfNextYear.getTime()));
输出:
01/01/2016
12/31/2016
01/01/2017
12/31/2017
java.time
您现在使用由java.time类取代了麻烦的旧的遗留日期时间类。
首先获取当前日期。
LocalDate
类代表没有时间和不带时区的仅有日期的值。
时区对确定日期至关重要。对于任何特定的时刻,日期因地区而异。例如,Paris France午夜后几分钟是新的一天,而在Montréal Québec仍然是“昨天”。
ZoneId z = ZoneId.of(“America/Montreal”);
LocalDate today = LocalDate.now(z);
使用Year
来表示整个一年的对象。
Year thisYear = Year.from(today);
Year nextYear = thisYear.plusYears(1);
Year lastYear = thisYear.minusYears(1);
通常在日期时间工作中,我们使用Half-Open方法表示一段时间。在这种方法中,开头是,包括,而结尾是,独家。因此,一年将从一月一号开始,并延续到下一年的一月一号,但不包括在内。
如果在Java 8上,您可以包含ThreeTen-Extra项目及其Interval
类来表示时间跨度。
否则自己动手。
LocalDate thisYearStart = thisYear.atDay(1);
LocalDate lastYearStart = lastYear.atDay(1);
LocalDate nextYearStart = nextYear.atDay(1);
如果您确实需要一年的最后一天,您可以从下一年的第一天减去一天。更容易的是使用TemporalAdjusters
类中定义的TemporalAdjuster
。
LocalDate thisYearFirstDay = today.with(TemporalAdjusters.firstDayOfYear());
LocalDate thisYearLastDay = today.with(TemporalAdjusters.lastDayOfYear());
LocalDate nextYearFirstDay = thisYearLastDay.plusDays(1);
LocalDate nextYearLastDay = nextYearFirstDay.with(TemporalAdjusters.lastDayOfYear());
LocalDate lastYearLastDay = thisYearFirstDay.minusDays(1);
LocalDate lastYearFirstDay = lastYearLastDay.with(TemporalAdjusters.firstDayOfYear());
关于java.time
的java.time框架是建立在Java 8和更高版本。这些类代替了令人讨厌的旧日期时间类,例如java.util.Date
,.Calendar
,& java.text.SimpleDateFormat
。
Joda-Time项目现在位于maintenance mode,建议迁移到java.time。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。
大部分的java.time功能后移植到Java 6 和ThreeTenABP还适于Android(见How to use…)。
ThreeTen-Extra项目扩展java.time与其他类。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。