蓝桥杯 高斯日记java程序

蓝桥杯 高斯日记java程序

import java.math.BigInteger;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Main {
    public static void main(String[] args) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");// 创建一个时间转换格式
        Date start = sdf.parse("1777-04-30");// 将字符串类型的日期转换成日期格式
        long startLong = start.getTime();// 得到日期的毫秒表示形式
        BigInteger startBig = new BigInteger(String.valueOf(startLong));// 将日期毫秒形式用BigInteger类表示,方便运算
        System.out.println("高斯生日那天时间为:" + startBig);
        long num = 8113L * 24L * 1000L  * 3600L;//进行long类型的数据的运算,如果不加L的话,会造成溢出
        BigInteger numBig = new BigInteger(num+ "");
        System.out.println("8113天时间为:" + numBig);
        BigInteger endBig = startBig.add(numBig);
        System.out.println("8113天时间后为:" + endBig);
        long endLong = endBig.longValue();
        String end = sdf.format(endLong);
        System.out.println(end);
    }
}

以上代码为运用了BigInteger和Date和SimpleDateFormat三个类进行的日期间的运算,因为自我感觉相比较于计算每一天来说,这样的算法还是比较简单的,
但是需要注意的是日期转换成毫秒后的数据类型,
起初用的是long类型,数据产生了溢出,8113X24X1000X3600得到的结果并不是我所期望的,后来经过思考将各个数的后面都加上L作为long类型进行计算,这样就行得通了。我想这可能就是类型之间的转换问题吧,所以写在这里已备不时之需。
其次,不运用long类型的数据之间进行加减乘除运算是因为程序中是不允许double,float,long来直接进行加减乘除的这是看网上人家说的不知道真不真,还有待确认

猜你喜欢

转载自blog.csdn.net/u013130967/article/details/50909596