Java计算出生一万天的纪念日期

西西里cc 2018-07-30 06:05:26
第一种方法,计算一万天后的毫秒值加上出生当天日期的毫秒值,貌似超过了long的取值范围(结果大概1.6亿),问题就是这么返回该毫秒值的当前日期

用第二种Calendara.add计算结果不准确

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class Test10000 {

public static void main(String[] args) throws ParseException {
System.out.println("----请输入自己的生日:(yyyy-mm-dd)----");

Scanner sc = new Scanner(System.in);

String birth = sc.nextLine();
// 将用户的生日转换为Date
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date date1 = sdf.parse(birth);

System.out.println(date1);// 出生的date1
/*
* 第一种方法,问题是10000天之后的日期的毫秒值超过了long的取值范围
*/
Date date = new Date();
/**
* 计算一万天纪念日
*/
long time10 = 10000*60*60*24*1000+date1.getTime() ;
System.out.println("一万天的毫秒值: "+10000*60*60*24*1000+" ---答案结果应该是864,000,000,000,");
System.out.println("出生当天的毫秒值: "+date1.getTime());

System.out.println(date);

/*
* 第二种方法计算,先计算从出生到今天多少天,再用10000-度过的天数
*/
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DAY_OF_YEAR, 1602);
System.out.println(calendar.getTime());

}

}
...全文
1575 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_42995954 2018-08-23
  • 打赏
  • 举报
回复
LONG的范围是非常大的,比你想象中的要大很多很多,在目前所有数字的计算的领域里,long都是够用的
kampoo 2018-08-22
  • 打赏
  • 举报
回复
使用joda第三方库:

import org.joda;

DateTime memday = new DateTime(yr, mth, dy, 0, 0).plusDays(10000);

另,10000天不可能越界的,才30年,人的一生在30000天左右。而Int型已经是10位十进制了,Long型完全足够的。
863777324 2018-08-01
  • 打赏
  • 举报
回复
public static void main(String[] args) { System.out.println("----请输入自己的生日:(yyyy-mm-dd)----"); String str="2000-01-01";//假设2000年这天 //根本不用那么麻烦 int a=10000%365; int b=10000/365; System.out.println(a+"剩余天数"); System.out.println(b+"添加年份"); //输出结果 // ----请输入自己的生日:(yyyy-mm-dd)---- // 145剩余天数 // 27添加年份 //计算到底是365 还是 366 int nian=Integer.parseInt(str.substring(0,4));//获取年 int yue=Integer.parseInt(str.substring(5,7)); int ri=Integer.parseInt(str.substring(8,10)); int sum=0; for(int i=nian;i<=nian+b;i++){ if(i%400==0){ sum++; continue; } if(i%4==0&&i%100!=0){ sum++; } } //数据都取出来了 剩下的就是计算 你自己算一下吧 我下班了 }
西西里cc 2018-07-30
  • 打赏
  • 举报
回复

哦原来从一开始计算10000L*60L*60L*24L*1000L时候就要加上L,

终于搞清楚了
西西里cc 2018-07-30
  • 打赏
  • 举报
回复
但是为什么不能直接计算呢,这还要手动算出10000天的毫秒值,再手动加上L,有没有什么简便的方法
西西里cc 2018-07-30
  • 打赏
  • 举报
回复

刚刚看过之后发现计算的结果要加L,因为是long型

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧