Android如何获得明天的约会

时间:2014-03-05 10:30:38

标签: java android calendar

在我的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,我需要做出哪些改变?

16 个答案:

答案 0 :(得分:48)

  1. Calendar

  2. 获取今天的日期
  3. 加1天。

  4. 用于显示目的的格式。

  5. 例如,

    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.Datejava.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)

TL;博士

java.time.LocalDate.now()
                   .plusDays( 1 ) 

java.time

所有其他答案都过时了,使用了麻烦的旧Date& Calendar类或现在处于维护模式的Joda-Time项目。现代方法使用 java.time 类。

LocalDate

LocalDate类表示没有时间且没有时区的仅限日期的值。

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的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}}的堆栈溢出。

关于java.time

DateTimeFormatter框架内置于Java 8及更高版本中。这些类取代了麻烦的旧java.time日期时间类,例如legacyjava.util.Date和& Calendar

现在位于SimpleDateFormatJoda-Time项目建议迁移到maintenance mode类。

要了解详情,请参阅java.time。并搜索Stack Overflow以获取许多示例和解释。规范是Oracle Tutorial

从哪里获取java.time类?

  • JSR 310Java SE 8以及之后
    • 内置。
    • 带有捆绑实现的标准Java API的一部分。
    • Java 9增加了一些小功能和修复。
  • Java SE 9Java SE 6
    • 大部分java.time功能都被反向移植到Java 6& 7 {in Java SE 7
  • ThreeTen-Backport
    • 更新版本的Android捆绑java.time类的实现。
    • 对于早期的Android,Android项目会调整 ThreeTen-Backport (如上所述)。见ThreeTenABP

答案 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"));