在我的Android应用程序中。我需要显示明天的日期,例如今天是3月5日,所以我需要显示为3月6日。我知道今天的日期,月份和年份的代码。
日期计算
GregorianCalendar gc = new GregorianCalendar();
yearat = gc.get(Calendar.YEAR);
yearstr = Integer.toString(yearat);
monthat = gc.get(Calendar.MONTH) + 1;
monthstr = Integer.toString(monthat);
dayat = gc.get(Calendar.DAY_OF_MONTH);
daystr = Integer.toString(dayat);
如果我有代码
dayat = gc.get(Calendar.DAY_OF_MONTH) + 1;
它会显示明天的日期。或者只是在今天的日期添加一个?例如,如果今天是1月31日。使用上面的代码,它会显示为1还是32?如果显示32,我需要做出哪些改变?
答案 0 :(得分:48)
以Calendar
加1天。
用于显示目的的格式。
例如,
GregorianCalendar gc = new GregorianCalendar();
gc.add(Calendar.DATE, 1);
// now do something with the calendar
答案 1 :(得分:40)
使用以下代码显示明天日期
Calendar calendar = Calendar.getInstance();
Date today = calendar.getTime();
calendar.add(Calendar.DAY_OF_YEAR, 1);
Date tomorrow = calendar.getTime();
使用SimpleDateFormat将Date格式化为字符串:
DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
String todayAsString = dateFormat.format(today);
String tomorrowAsString = dateFormat.format(tomorrow);
System.out.println(todayAsString);
System.out.println(tomorrowAsString);
打印:
05-Mar-2014
06-Mar-2014
答案 2 :(得分:4)
Calendar calendar = Calendar.getInstance();
Date today = calendar.getTime();
calendar.add(Calendar.DAY_OF_YEAR, 1);
Date tomorrow = calendar.getTime();
答案 3 :(得分:4)
你必须在日历日只添加1个。
GregorianCalendar gc = new GregorianCalendar();
gc.add(Calendar.DATE, 1);
答案 4 :(得分:4)
java.util.Date
和java.util.Calendar
很难合作。我建议你使用JodaTime,它有一个更清洁/更好的API。如今,JodaTime非常标准。
http://www.joda.org/joda-time/#Why_Joda-Time
请注意,JDK 8将引入一个受JodaTime影响很大的新日期/时间API。
答案 5 :(得分:3)
其他选择:
Calendar tomorrow = Calendar.getInstance();
tomorrow.roll(Calendar.DATE, true);
或
tomorrow.roll(Calendar.DATE, 1);
roll
也可以通过传递一个负数来回溯,例如:
Calendar yesterday = Calendar.getInstance();
yesterday.roll(Calendar.DATE, -1);
答案 6 :(得分:2)
第一个答案几乎涵盖了可能性。 但是这里有另一个解决方案,你可以在org.apache.commons.lang.time中使用:
Date lTomorrow = DateUtils.addDays(new Date(), 1);
答案 7 :(得分:2)
java.util.Date和.Calendar类非常麻烦。避免他们。而是使用Joda-Time库或与java.time package捆绑在一起的新Java 8。
使用Joda-Time 2.3库的一些示例代码。
DateTimeZone timeZone = DateTimeZone.forID( "Europe/Paris" );
DateTime now = new DateTime( timeZone );
DateTime tomorrow = now.plusDays( 1 );
String output = DateTimeFormat.forPattern( "FF" ).withLocale(Locale.FRANCE).print( tomorrow );
答案 8 :(得分:1)
使用日历获取今天的日期,然后再添加1天。
答案 9 :(得分:0)
试试这样..
dayat = gc.add(Calendar.DATE, 1);
答案 10 :(得分:0)
java.time.LocalDate.now()
.plusDays( 1 )
所有其他答案都过时了,使用了麻烦的旧Date
& Calendar
类或现在处于维护模式的Joda-Time项目。现代方法使用 java.time 类。
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
从那个LocalDate
你可以做数学来得到第二天。
LocalDate tomorrow = today.plusDays( 1 ) ;
要生成表示LocalDate
对象值的字符串,请根据ISO 8601标准toString
调用格式化的文本YYYY-MM-DD
。
要生成其他格式的字符串,请搜索“{3}}的堆栈溢出。
” DateTimeFormatter
框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacy,java.util.Date
和& Calendar
现在位于SimpleDateFormat
的Joda-Time项目建议迁移到maintenance mode类。
要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial。
从哪里获取java.time类?
答案 11 :(得分:0)
第二天设置的最佳方法是
public void NextDate()
{
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
// set current date into textview
e_date.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(mDay+1).append("-").append(mMonth + 1).append("-")
.append(mYear).append(" "));
}
答案 12 :(得分:0)
这对我很有帮助!!
Date currentDate = new Date();// get the current date
currentDate.setDate(currentDate.getDate() + 1);//add one day to the current date
dateView.setText(currentDate.toString().substring(0, 10));// put the string in specific format in my textView
祝你好运!!
答案 13 :(得分:0)
Just call this method and send date from which you want next date
public String nextDate(Date dateClicked) {
//
String next_day;
calander_view.setCurrentDayTextColor(context.getResources().getColor(R.color.white_color));
//calander_view.setCurrentDayBackgroundColor(context.getResources().getColor(R.color.gray_color));
SimpleDateFormat dateFormatForDisplaying = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
String date_format = dateFormatForDisplaying.format(dateClicked);
SimpleDateFormat simpleDateformat = new SimpleDateFormat("E"); // the day of the week abbreviated
final Calendar calendar = Calendar.getInstance();
try {
Date date = dateFormatForDisplaying.parse(date_format);
calendar.setTime(date);
calendar.add(Calendar.DATE, 1);
String nex = dateFormatForDisplaying.format(calendar.getTime());
Date d1 = dateFormatForDisplaying.parse(nex);
String day_1 = simpleDateformat.format(d1);
next_day = nex + ", " + day_1;
} catch (ParseException e) {
e.printStackTrace();
}
return next_day;
}
答案 14 :(得分:0)
String lastDate="5/28/2018";
Calendar calendar = Calendar.getInstance();
String[] sDate=lastDate.split("/");
calendar.set(Integer.parseInt(sDate[2]),Integer.parseInt(sDate[0]),Integer.parseInt(sDate[1]));
DateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy");
// String todayAsString = dateFormat.format(today);
for (int i=1;i<29;i++)
{
calendar.add(Calendar.DAY_OF_YEAR,1);
// td[i].setText(dateFormat.format(calendar.getTime()));
System.out.println(dateFormat.format(calendar.getTime()));
}
答案 15 :(得分:0)
现在容易多了
String today = LocalDateTime.now().format(DateTimeFormatter.ofPattern("MM-dd"));
String tomorrow = LocalDate.now().plusDays(1).format(DateTimeFormatter.ofPattern("MM-dd"));