我已经实现了下面的代码来计算剩余的天数。我已经使用SimpleDateFormat将字符串转换为日期。如果输入10/02/1993(今天的日期)作为日期,则输出显示还剩0天。但如果我选择11/02/1993,它显示的输出与0天相同。但如果我改变月份,即1993年2月22日7月2日,它显示的是剩下160天,而不是原来的162天,这是原来的结果。我在这里做错了什么?非常感谢任何帮助。
private static void calculateNextBirthday() {
Scanner in = new Scanner(System.in);
System.out.println("Enter your birthday(dd/MM/yyyy)");
user_input = in.nextLine();
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Calendar user_selected_day = new GregorianCalendar();
Calendar today = new GregorianCalendar();
Date selected_date = null;
try {
selected_date = formatter.parse(user_input);
} catch (ParseException e) {
e.printStackTrace();
}
user_selected_day.setTime(selected_date);
int user_selected_month = user_selected_day.get(Calendar.MONTH);
int CMonth = today.get(Calendar.MONTH);
int user_selected_date = user_selected_day.get(Calendar.DAY_OF_MONTH);
int CDate = today.get(Calendar.DAY_OF_MONTH);
user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));
user_selected_day.set(Calendar.DAY_OF_WEEK,today.get(Calendar.DAY_OF_WEEK));
if (user_selected_month < CMonth) {
user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
}
else if (user_selected_month == CMonth){
if(user_selected_date < CDate){
user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
}
}
long millis = user_selected_day.getTimeInMillis() - today.getTimeInMillis();
long days;
days = (millis / (24 * 60 * 60 * 1000));
System.out.println(String.valueOf(days) + " days left!!");
}
更新:我已经更新了下面的代码,它工作良好。希望它对将来的人有所帮助。
` SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
Calendar user_selected_day = new GregorianCalendar();
Calendar today = new GregorianCalendar();
Date selected_date = null;
try {
selected_date = formatter.parse(plainDate);
} catch (ParseException e) {
e.printStackTrace();
}
user_selected_day.setTime(selected_date);
int user_selected_month = user_selected_day.get(Calendar.MONTH);
int CMonth = today.get(Calendar.MONTH);
int user_selected_date = user_selected_day.get(Calendar.DAY_OF_MONTH);
int CDate = today.get(Calendar.DAY_OF_MONTH);
user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));
user_selected_day.set(Calendar.HOUR_OF_DAY,today.get(Calendar.HOUR_OF_DAY));
user_selected_day.set(Calendar.MINUTE,today.get(Calendar.MINUTE));
user_selected_day.set(Calendar.SECOND,today.get(Calendar.SECOND));
user_selected_day.set(Calendar.MILLISECOND,today.get(Calendar.MILLISECOND));
if (user_selected_month < CMonth) {
user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
}
else if (user_selected_month == CMonth){
if(user_selected_date < CDate){
user_selected_day.set(Calendar.YEAR,today.get(Calendar.YEAR) + 1);
}
}
long millis = user_selected_day.getTimeInMillis() - today.getTimeInMillis();
long days;
if(user_selected_day.getTime()==today.getTime()){
days = 0;
}
else{
days = (millis / (24 * 60 * 60 * 1000));
}`
您还可以在Java 8中使用localdate
类,随时添加/减去日期。
java.time
提供了一个perio
类来表示一段时间,例如天数或小时和分钟。localdate
和friends提供plus()
和minus()
方法来添加或减去期间或其他与时间相关的对象。Period提供了工厂方法,如ofdays()
。
阅读此示例以供参考。它计算从现在起700
天后的日期:
/**
* DateAdd -- compute the difference between two dates (e.g., today and 700 days
* from now).
*/
public class Main {
public static void main(String[] av) {
/** Today's date */
LocalDate now = LocalDate.now();
Period p = Period.ofDays(700);
LocalDate then = now.plus(p);
System.out.printf("Seven hundred days from %s is %s%n", now, then);
}
}
运行此程序将报告当前的日期和时间,以及从现在起七百天后的日期和时间。例如:
Seven hundred days from 2013-11-09 is 2015-10-10
问题出在线路上
user_selected_day.set(Calendar.YEAR, today.get(Calendar.YEAR));
这将把今天日期的年份设置为user_select
day,并且当month相等时,它将进入elseif内部并离开same而不做任何更改。
还要检查您提到的if else条件。
问题内容: 给定月份剩余的天数如何找到当月剩余的天数?例如,如果当前月份为11月,而今天为16/11/2016,则月份中的天数``经过的天数=?我想动态地进行操作在我的示例中30′16 = 14 问题答案: 只需使用Datepart函数:
我想用Java计算生日的剩余天数。如果今天的日期等于输入的日期,我日志今天是我的生日。如果今天的日期不等于输入的日期,我要计算生日的剩余天数。我怎么能那样做? 我的代码:
问题内容: 我一直在搜索有关此主题的信息,但仍然听不懂,如果有人可以详细说明,我将非常感激。 我的任务是将两个变量除以整数除以余数。问题是,我不知道余数是什么,现在我做了类似的事情,这是通过互联网搜索得到的: 如果我例如设置(a = 43)和(b = 67) 然后我会得到这个结果: 现在,由于我不知道其余的是什么(这只是来自互联网的建议),所以我不知道这是否是正确的答案。 谢谢你的帮助, 亲切的问
我使用Laravel 5.3订阅用户的计划与付款处理条。我在stripe上注册了一个计划,并使用以下代码成功订阅了该计划的用户 现在用户已经订阅,但是我如何让用户在该计划中剩下的剩余天数过期。用户表、订阅表和订阅对象没有关于到期日期或天数的任何信息。
要求定义一个int型数组a,包含100个元素,保存100个随机的4位数。再定义一个int型数组b,包含10个元素。统计a数组中的元素对10求余等于0的个数,保存到b[0]中;对10求余等于1的个数,保存到b[1]中,……依此类推。 解决(python) #!/usr/bin/env python #coding:utf-8 import random if __name__=="__main__"
我正在尝试用Docker Compose设置Docker机器。 场景1(不使用Docker机器) 如果我在不使用Docker机器的情况下运行,它将按照所希望的方式创建我的3个链接容器(Nginx+MongoDB+NodeJS)。 场景2(使用Docker机器) 然后使用Docker机器创建一个VM,并告诉Docker使用与该机器对话。 此时,如果我ssh到我的docker机器并运行,我将得到: 如