int year=(int)(Mathrandom()3000);得到的就是0-3000的年份
int month=(int)(Mathrandom()11)+1;就是1-12月
输出天数是什么天数,不指定日,没法准确计算天数
import javautil;
import javatext;
public class CalendarDemo
{
public static void main(String[] args)
{
Calendar c1 = CalendargetInstance();
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String time1 = "2011-03-11 11:39:04";
String time2 = "2022-02-03 22:33:44";
try
{
c1setTime(formatparse(time1));
}
catch (Exception e)
{
Systemoutprintln(e);
}
Systemoutprintln("nian" + c1get(c1YEAR) + "yue" + (c1get(c1MONTH) + 1) + "ri" + c1get(c1DAY_OF_MONTH)); //获取年月日
c1add(c1DAY_OF_MONTH,5); //增加5天
c1add(c1HOUR_OF_DAY,-4); //减少4个小时
c1roll(c1YEAR,2); //增加2年
c1roll(c1MONTH,-2);//减少2个月
Systemoutprintln("time1 = " + format2format(c1getTime()));
c1set(c1MONTH,6);//增加7天
Systemoutprintln("time1 = " + format2format(c1getTime()));
try
{
c1setTime(formatparse(time2));//将日历时间设为指定时间
Systemoutprintln("time1 = " + format2format(c1getTime()));
}
catch (Exception e)
{
Systemerrprintln(e);
}
}
}
多看看文档就好
如果是以当前时间为起点,得到自然年,可以这样:
Calendar cal = CalendargetInstance() ;
caladd(CalendarDAY_OF_YEAR, 365);
int myYears = calgetTime()getYear()- (new Date())getYear();
import javautil;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(Systemin);
Systemoutprintln("请输入年份");
int year = inputnextInt();
Systemoutprintln("请输入月份");
int month = inputnextInt();
if(month==2){
if (((year % 100 == 0) && (year % 400 == 0))
|| ((year % 100 != 0) && (year % 4 == 0))) {
Systemoutprintln(month+"月份天数是29天");
return;
}else {
Systemoutprintln(month+"月份天数是28天");
return;
}
}else if(month%2==0 ) {
Systemoutprintln(month+"月份是30天");
}else if(month%2!=0) {
Systemoutprintln(month+"月份是31天");
}
}
}
首先把获取的字符串日期转换成Date类型(从前台页面获取的是字符串类型的日期 a,b):
Date a1 = new SimpleDateFormat("yyyy-MM-dd")parse(a);
Date b1 = new SimpleDateFormat("yyyy-MM-dd")parse(b);
//获取相减后天数
long day = (a1getTime()-b1getTime())/(2460601000);
希望可以帮到你。
楼上正解,不过楼主问出这个问题可能也是初学者,我就提供一下用简单语法的代码吧
public static void main(String[] args) {
Scanner scan=new Scanner(Systemin);
Systemoutprintln("请输入年份");
int year= scannextInt();//得到需求年份
Systemoutprintln("请输入月份");
int month=scannextInt();//得到需求月份
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
Systemoutprintln(year+"年"+month+"月的天数为:"+31);
break;
case 4:
case 6:
case 9:
case 11:
Systemoutprintln(year+"年"+month+"月的天数为:"+30);
case 2:
if((year%400)==0 || ((year%4)==0)&&((year%100)!=0)){
Systemoutprintln(year+"年2月的天数为:"+29);
}else{
Systemoutprintln(year+"年2月的天数为:"+28);
}
}
}
/
2015年12月9日下午9:01:18
@author hp TODO 计算两个日期之间的天数
/
public class MyCalender {
/
判断该年是不是闰年
@param year
年份
@return 是则返回true,否则返回false
/
public boolean isLeapYear(int year) {
return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0);
}
/
返回当月的天数
@param year
年份
@param month
月份
@return
/
public int getDayOfMonth(int year, int month) {
int[] day = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if (isLeapYear(year) && 2 == month) {// 闰年且为2月时
return day[month] + 1;
}
return day[month];
}
/
计算两个日期之间的天数(结束日期必须大于开始日期)
@param startYear
开始年份
@param startMonth
开始月份
@param startDay
开始日
@param endYear
结束年份
@param endMonth
结束月份
@param endDay
结束日
@return
/
public long countDayBetweenTowDate(int startYear, int startMonth, int startDay, int endYear, int endMonth,
int endDay) {
long sum = 0;
int startDate = 0;
int endDate = 0;
for (int year = startYear; year < endYear; year++) {
sum += 365;
if (isLeapYear(year)) {
sum++;
}
}
for (int month = 0; month < startMonth; month++) {
startDate += getDayOfMonth(startYear, month);
}
startDate += startDay;
for (int month = 0; month < endMonth; month++) {
endDate += getDayOfMonth(endYear, month);
}
endDate += endDay;
sum = sum + endDate - startDate;
return sum;
}
public static void main(String[] args) {
MyCalender calender = new MyCalender();
int startYear = 1990;
int startMonth = 1;
int startDay = 1;
int endYear = 1990;
int endMonth = 12;
int endDay = 31;
// 这里您可以使用Scanner 进行控制台输进
Systemoutprintln(calendercountDayBetweenTowDate(startYear, startMonth, startDay, endYear, endMonth, endDay));
}
}
在Java开发物流或是其他功能的时候会用到两个日期相差多天的数据,所以整理了一下备用。
调用方式:
代码如下 复制代码
long date1 = getDateTime("20121201");//可改成自己的日期类型,但以“20121212”这种格式
long date2 = getDateTime("20121212");
int day = dateInterval(date1, date2);
Systemoutprintln(day);
具体实现方法调用:
代码如下 复制代码
/
计算出两个日期之间相差的天数
建议date1 大于 date2 这样计算的值为正数
@param date1 日期1
@param date2 日期2
@return date1 - date2
/
public static int dateInterval(long date1, long date2) {
if(date2 > date1){
date2 = date2 + date1;
date1 = date2 - date1;
date2 = date2 - date1;
}
// Canlendar 该类是一个抽象类
// 提供了丰富的日历字段
// 本程序中使用到了
// CalendarYEAR 日期中的年份
// CalendarDAY_OF_YEAR 当前年中的天数
// getActualMaximum(CalendarDAY_OF_YEAR) 返回今年是 365 天还是366天
Calendar calendar1 = CalendargetInstance(); // 获得一个日历
calendar1setTimeInMillis(date1); // 用给定的 long 值设置此 Calendar 的当前时间值。
Calendar calendar2 = CalendargetInstance();
calendar2setTimeInMillis(date2);
// 先判断是否同年
int y1 = calendar1get(CalendarYEAR);
int y2 = calendar2get(CalendarYEAR);
int d1 = calendar1get(CalendarDAY_OF_YEAR);
int d2 = calendar2get(CalendarDAY_OF_YEAR);
int maxDays = 0;
int day = 0;
if(y1 - y2 > 0){
day = numerical(maxDays, d1, d2, y1, y2, calendar2);
}else{
day = d1 - d2;
}
return day;
}
/
日期间隔计算
计算公式(示例):
20121201- 20121212
取出20121201这一年过了多少天 d1 = 天数 取出20121212这一年过了多少天 d2 = 天数
如果2012年这一年有366天就要让间隔的天数+1,因为2月份有29日。
@param maxDays 用于记录一年中有365天还是366天
@param d1 表示在这年中过了多少天
@param d2 表示在这年中过了多少天
@param y1 当前为2012年
@param y2 当前为2012年
@param calendar 根据日历对象来获取一年中有多少天
@return 计算后日期间隔的天数
/
public static int numerical(int maxDays, int d1, int d2, int y1, int y2, Calendar calendar){
int day = d1 - d2;
int betweenYears = y1 - y2;
List<Integer> d366 = new ArrayList<Integer>();
if(calendargetActualMaximum(CalendarDAY_OF_YEAR) == 366){
Systemoutprintln(calendargetActualMaximum(CalendarDAY_OF_YEAR));
day += 1;
}
for (int i = 0; i < betweenYears; i++) {
// 当年 + 1 设置下一年中有多少天
calendarset(CalendarYEAR, (calendarget(CalendarYEAR)) + 1);
maxDays = calendargetActualMaximum(CalendarDAY_OF_YEAR);
// 第一个 366 天不用 + 1 将所有366记录,先不进行加入然后再少加一个
if(maxDays != 366){
day += maxDays;
}else{
d366add(maxDays);
}
// 如果最后一个 maxDays 等于366 day - 1
if(i == betweenYears-1 && betweenYears > 1 && maxDays == 366){
day -= 1;
}
}
for(int i = 0; i < d366size(); i++){
// 一个或一个以上的366天
if(d366size() >= 1){
day += d366get(i);
}
}
return day;
}
/
将日期字符串装换成日期
@param strDate 日期支持年月日 示例:yyyyMMdd
@return 1970年1月1日器日期的毫秒数
/
public static long getDateTime(String strDate) {
return getDateByFormat(strDate, "yyyyMMdd")getTime();
}
/
@param strDate 日期字符串
@param format 日期格式
@return Date
/
public static Date getDateByFormat(String strDate, String format) {
SimpleDateFormat sdf = new SimpleDateFormat(format);
try{
return (sdfparse(strDate));
}catch (Exception e){
return null;
}
}
例2
代码如下 复制代码
import javatextParseException;
import javatextSimpleDateFormat;
import javautilCalendar;
import javautilDate;
public class test16 {
/
@param args
@throws ParseException
/
public static void main(String[] args) throws ParseException {
// TODO Auto-generated method stub
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d1=sdfparse("2012-09-08 10:10:10");
Date d2=sdfparse("2012-09-15 00:00:00");
Systemoutprintln(daysBetween(d1,d2));
Systemoutprintln(daysBetween("2012-09-08 10:10:10","2012-09-15 00:00:00"));
}
/
计算两个日期之间相差的天数
@param smdate 较小的时间
@param bdate 较大的时间
@return 相差天数
@throws ParseException
/
public static int daysBetween(Date smdate,Date bdate) throws ParseException
{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
smdate=sdfparse(sdfformat(smdate));
bdate=sdfparse(sdfformat(bdate));
Calendar cal = CalendargetInstance();
calsetTime(smdate);
long time1 = calgetTimeInMillis();
calsetTime(bdate);
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
/
字符串的日期格式的计算
/
public static int daysBetween(String smdate,String bdate) throws ParseException{
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Calendar cal = CalendargetInstance();
calsetTime(sdfparse(smdate));
long time1 = calgetTimeInMillis();
calsetTime(sdfparse(bdate));
long time2 = calgetTimeInMillis();
long between_days=(time2-time1)/(1000360024);
return IntegerparseInt(StringvalueOf(between_days));
}
}
例3
代码如下 复制代码
//取得剩余天数
SimpleDateFormat df=new SimpleDateFormat("yyyymmdd");
Date d0=new javautilDate();
Date d1=dfparse(end_date);
long time0=d0getTime();
long time1=d1getTime();
Systemoutprintln((time1-time0)/(1000606024));
这样算两个时间相差的天数比较好
代码如下 复制代码
/
计算两个日期之间相差的天数
@param date1
@param date2
@return
/
public static int diffdates(Date date1, Date date2) {
int result = 0;
ElapsedTime et = new ElapsedTime();
GregorianCalendar gc1 = new GregorianCalendar();
GregorianCalendar gc2 = new GregorianCalendar();
gc1setTime(date1);
gc2setTime(date2);
result = etgetDays(gc1, gc2);
return result;
}
然后ElapseTime中的方法是:
代码如下 复制代码
public int getDays(GregorianCalendar g1, GregorianCalendar g2) {
int elapsed = 0;
GregorianCalendar gc1, gc2;
if (g2after(g1)) {
gc2 = (GregorianCalendar) g2clone();
gc1 = (GregorianCalendar) g1clone();
} else {
gc2 = (GregorianCalendar) g1clone();
gc1 = (GregorianCalendar) g2clone();
}
gc1clear(CalendarMILLISECOND);
gc1clear(CalendarSECOND);
gc1clear(CalendarMINUTE);
gc1clear(CalendarHOUR_OF_DAY);
gc2clear(CalendarMILLISECOND);
gc2clear(CalendarSECOND);
gc2clear(CalendarMINUTE);
gc2clear(CalendarHOUR_OF_DAY);
while (gc1before(gc2)) {
gc1add(CalendarDATE, 1);
elapsed++;
}
return elapsed;
}
其实使用joda最简单
代码如下 复制代码
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = Perioddays(2);
return datetimeRentedplus(rentalPeriod)isBeforeNow()
}
以上就是关于java,急!!利用Math类的random()函数产生一个0—3000的年份,1-12的月份,输出天数。全部的内容,包括:java,急!!利用Math类的random()函数产生一个0—3000的年份,1-12的月份,输出天数。、java中,利用Calendar对象怎么得到天数,和月数,(天数和月数单独拿出来的 不像:yyyy-MM-dd)、java中,现在知道总天数 days, 如何利用 Calendar 类,得到这些天数是多少年years等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)