使用Java将一组月转换为天
我正在尝试创建一个方法,您可以在其中输入的参数、当前月份以及要追溯的月份数,并将所有这些转换为天。例如,如果当前月份是1月,我想将最后5个月转换为天,那么答案是153。我有以下信息供大家使用使用Java将一组月转换为天,java,helper,Java,Helper,我正在尝试创建一个方法,您可以在其中输入的参数、当前月份以及要追溯的月份数,并将所有这些转换为天。例如,如果当前月份是1月,我想将最后5个月转换为天,那么答案是153。我有以下信息供大家使用 private Calendar cal; private int currentMonth; private final int JANUARY = 31; private final int FEBRUARY = 28; private final int M
private Calendar cal;
private int currentMonth;
private final int JANUARY = 31;
private final int FEBRUARY = 28;
private final int MARCH = 31;
private final int APRIL = 30;
private final int MAY = 31;
private final int JUNE = 30;
private final int JULY = 31;
private final int AUGUST = 31;
private final int SEPTEMBER = 30;
private final int OCTOBER = 31;
private final int NOVEMBER = 30;
private final int DECEMBER = 31;
public Constructor(){
cal = new GregorianCalendar();
currentMonth = cal.get(Calendar.MONTH);
}
private int convertMonthsToDays(int currentMonth, int months){
int days;
return days;
}
这个实现的主要问题是它被固定在2000年,而不是今年
private int convertMonthsToDays(int currentMonth, int months){
int days = 0;
for (int iter=0; iter < months; iter++)
{
currentMonth = (currentMonth - iter) % 12;
this.cal.set(2000, currentMonth, 1);
days = days + this.cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
return days;
}
private int convertMonthsToDays(int currentMonth,int months){
整数天=0;
用于(国际热核试验堆=0;国际热核试验堆<2个月;国际热核试验堆++)
{
当前月=(当前月-iter)%12;
此.cal.set(2000,当前月,1);
天=天+此.cal.getActualMaximum(日历月的第天);
}
返程天数;
}
此实现的主要问题是它被固定在2000年,而不是当前年份
private int convertMonthsToDays(int currentMonth, int months){
int days = 0;
for (int iter=0; iter < months; iter++)
{
currentMonth = (currentMonth - iter) % 12;
this.cal.set(2000, currentMonth, 1);
days = days + this.cal.getActualMaximum(Calendar.DAY_OF_MONTH);
}
return days;
}
private int convertMonthsToDays(int currentMonth,int months){
整数天=0;
用于(国际热核试验堆=0;国际热核试验堆<2个月;国际热核试验堆++)
{
当前月=(当前月-iter)%12;
此.cal.set(2000,当前月,1);
天=天+此.cal.getActualMaximum(日历月的第天);
}
返程天数;
}
一切都在Java中,为什么还要自己做算法呢
只要计算一下现在和5个月前的毫秒
long now = System.currentTimeMillis();
Calendar calendar = GregorianCalendar.getInstance();
//Here I set the calendar to now. But you can set the date you want.
// by using the method calendar.set()
calendar.setTimeInMillis(now);
calendar.add(Calendar.MONTH, -5);
long previous = calendar.getTimeInMillis();
int numberOfDays =(int)( (now - previous) / (1000* 3600 *24));
希望能有所帮助
关于。当一切都是Java时,为什么要制作自己的算法 只要计算一下现在和5个月前的毫秒
long now = System.currentTimeMillis();
Calendar calendar = GregorianCalendar.getInstance();
//Here I set the calendar to now. But you can set the date you want.
// by using the method calendar.set()
calendar.setTimeInMillis(now);
calendar.add(Calendar.MONTH, -5);
long previous = calendar.getTimeInMillis();
int numberOfDays =(int)( (now - previous) / (1000* 3600 *24));
希望能有所帮助
问候。根据您的需要使用此代码
package test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.GregorianCalendar;
import com.mPower.fw.dao.ClassMaster;
import com.mPower.fw.impl.DaoServiceIMPL;
import com.mPower.fw.util.hibernateUtil;
public class runT {
public static void main(String[] args) throws IOException {
try{
Calendar calendar = new GregorianCalendar();
int CURRENT_MONTH = 0;
int MONTH_BACK = 5;
int totalDays = 0;
calendar.set(Calendar.MONTH, CURRENT_MONTH);
for(int i=0;i<MONTH_BACK;i++){
totalDays += calendar.getMaximum(java.util.Calendar.DAY_OF_MONTH);
calendar.add(Calendar.MONTH, -1);
}
System.out.println(totalDays);
}catch(Exception e){
e.printStackTrace();
}
}
}
封装测试;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.hibernate.Criteria;
导入org.hibernate.Session;
导入org.hibernate.criteria.Restrictions;
导入com.ibm.icu.util.Calendar;
导入com.ibm.icu.util.GregorianCalendar;
导入com.mPower.fw.dao.ClassMaster;
导入com.mPower.fw.impl.DaoServiceIMPL;
导入com.mPower.fw.util.hibernateUtil;
公共类矮子{
公共静态void main(字符串[]args)引发IOException{
试一试{
日历=新的公历日历();
int当前_月=0;
int MONTH_BACK=5;
整数总天数=0;
calendar.set(calendar.MONTH,当前月);
对于(inti=0;i,请根据需要使用此代码
package test;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import com.ibm.icu.util.Calendar;
import com.ibm.icu.util.GregorianCalendar;
import com.mPower.fw.dao.ClassMaster;
import com.mPower.fw.impl.DaoServiceIMPL;
import com.mPower.fw.util.hibernateUtil;
public class runT {
public static void main(String[] args) throws IOException {
try{
Calendar calendar = new GregorianCalendar();
int CURRENT_MONTH = 0;
int MONTH_BACK = 5;
int totalDays = 0;
calendar.set(Calendar.MONTH, CURRENT_MONTH);
for(int i=0;i<MONTH_BACK;i++){
totalDays += calendar.getMaximum(java.util.Calendar.DAY_OF_MONTH);
calendar.add(Calendar.MONTH, -1);
}
System.out.println(totalDays);
}catch(Exception e){
e.printStackTrace();
}
}
}
封装测试;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.List;
导入org.hibernate.Criteria;
导入org.hibernate.Session;
导入org.hibernate.criteria.Restrictions;
导入com.ibm.icu.util.Calendar;
导入com.ibm.icu.util.GregorianCalendar;
导入com.mPower.fw.dao.ClassMaster;
导入com.mPower.fw.impl.DaoServiceIMPL;
导入com.mPower.fw.util.hibernateUtil;
公共类矮子{
公共静态void main(字符串[]args)引发IOException{
试一试{
日历=新的公历日历();
int当前_月=0;
int MONTH_BACK=5;
整数总天数=0;
calendar.set(calendar.MONTH,当前月);
对于(int i=0;i我不确定是否允许您使用SimpleDataFormat,但是这里有一个很简单的示例。我不知道社区对它的感觉如何,但它是有效的:
private static SimpleDateFormat monthNumberFormat = new SimpleDateFormat("M");
private static SimpleDateFormat daysOfYearFormat = new SimpleDateFormat("DDD");
private static int convertMonthsToDays(int currentMonth, int months){
try {
Date startingDate = monthNumberFormat.parse(currentMonth + "");
Date endingDate = monthNumberFormat.parse(currentMonth - months + "");
return Integer.parseInt(daysOfYearFormat.format(startingDate)) -
Integer.parseInt(daysOfYearFormat.format(endingDate));
} catch (ParseException e) {
return -1;
} catch (NumberFormatException nfe){
return -1;
}
}
这里没有检查您是否传递了有效的参数,并且它也不考虑返回一年多的时间
使用此方法,您可以传递所需的月份数和返回的月份数,它将以天为单位显示差异。我不确定是否允许您使用SimpleDataFormat,但是这里有一个非常简单的示例。我不知道社区对此的感觉如何,但它是有效的:
private static SimpleDateFormat monthNumberFormat = new SimpleDateFormat("M");
private static SimpleDateFormat daysOfYearFormat = new SimpleDateFormat("DDD");
private static int convertMonthsToDays(int currentMonth, int months){
try {
Date startingDate = monthNumberFormat.parse(currentMonth + "");
Date endingDate = monthNumberFormat.parse(currentMonth - months + "");
return Integer.parseInt(daysOfYearFormat.format(startingDate)) -
Integer.parseInt(daysOfYearFormat.format(endingDate));
} catch (ParseException e) {
return -1;
} catch (NumberFormatException nfe){
return -1;
}
}
这里没有检查您是否传递了有效的参数,并且它也不考虑返回一年多的时间
使用此方法,您可以传递所需月数和返回的月数,它将以天为单位显示差值。是否有日历方法可供我使用..?是否应使用循环?我不确定如何执行。是否有日历方法可供我使用..?是否应使用循环?我不确定如何执行。您致电d最后一个数组months
并将months
作为一个整数。您必须更改其中一个。您调用了最后一个数组months
,并将months
作为一个整数。您必须更改其中一个。我认为没有必要使用循环来解决此类问题,我更喜欢@Eric R.的解决方案我不认为有必要用循环来解决这类问题,我喜欢@Eric R.的解决方案,它能更好地计算以毫秒为单位的差值并将其转换回天。更快更干净的IMHO