JAVA编写从屏幕上输入一个日期,计算出该日期是该年的第几天

JAVA编写从屏幕上输入一个日期,计算出该日期是该年的第几天
得考虑闰年
日期是否合法等

其实Java API就带这个方法:
calendar.get(GregorianCalendar.DAY_OF_YEAR);

这个是我写的:
import static java.lang.System.out;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.GregorianCalendar;

public class DayCounter {

private static final long DAY_IN_MILL_SECOND = 24 * 60 * 60 * 1000L;

private Date zeroOClock(Date date) {
if (date == null)
throw new IllegalStateException("date can't be null");
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date);
calendar.set(GregorianCalendar.HOUR_OF_DAY, 0);
calendar.set(GregorianCalendar.MINUTE, 0);
calendar.set(GregorianCalendar.SECOND, 0);
calendar.set(GregorianCalendar.MILLISECOND, 0);
return calendar.getTime();
}

private int daysBetween(Date end, Date start) {
long millSecondsBetween = Math.abs(zeroOClock(end).getTime()
- zeroOClock(start).getTime());
return (int) (millSecondsBetween / DAY_IN_MILL_SECOND);
}

public int dayOfYear(Date date) {
GregorianCalendar start = new GregorianCalendar();
start.setTime(date);
start.set(GregorianCalendar.MONTH, 0);
start.set(GregorianCalendar.DAY_OF_MONTH, 1);
return daysBetween(date, start.getTime()) + 1;
}

public int dayOfYear(String date) {
try {
return dayOfYear(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.parse(date));
} catch (ParseException e) {
throw new RuntimeException("error date format:" + date);
}
}

/**
* Test
*
* @throws ParseException
*/
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormate = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
DayCounter dayCounter = new DayCounter();

GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(dateFormate.parse("2009-01-01 15:20:00"));
out.println(dayCounter.dayOfYear(calendar.getTime()));
out.println(dayCounter.dayOfYear("2009-01-01 15:20:00"));
out.println(calendar.get(GregorianCalendar.DAY_OF_YEAR));

calendar.setTime(dateFormate.parse("2009-01-31 15:20:00"));
out.println(dayCounter.dayOfYear(calendar.getTime()));
out.println(dayCounter.dayOfYear("2009-01-31 15:20:00"));
out.println(calendar.get(GregorianCalendar.DAY_OF_YEAR));

calendar.setTime(dateFormate.parse("2009-02-1 15:20:00"));
out.println(dayCounter.dayOfYear(calendar.getTime()));
out.println(dayCounter.dayOfYear("2009-02-1 15:20:00"));
out.println(calendar.get(GregorianCalendar.DAY_OF_YEAR));

calendar.setTime(dateFormate.parse("2009-03-1 15:20:00"));
out.println(dayCounter.dayOfYear(calendar.getTime()));
out.println(dayCounter.dayOfYear("2009-03-1 15:20:00"));
out.println(calendar.get(GregorianCalendar.DAY_OF_YEAR));
}
}

最后:
如果想学编程的话多动手写写吧,要不永远也不会。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-05-14
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse("2009-01-02");
Calendar c = Calendar.getInstance();
c.setTime(date);
System.out.println(c.get(Calendar.DAY_OF_YEAR));本回答被网友采纳
第2个回答  2009-10-14
public int orderDate(Date date){
int dateSum = 0;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
String dateStr = format.format(date);
System.out.println(dateStr);
int year = Integer.valueOf(dateStr.substring(0,4));
int month = Integer.valueOf(dateStr.substring(5,7));
int day = Integer.valueOf(dateStr.substring(8,10));
for (int i = 1; i < month; i++){
switch(i){
case 1: case 3: case 5: case 7: case 8: case 10: case 12:dateSum += 31; break;
case 4: case 6: case 9: case 11:dateSum += 30; break;
case 2:
if(((year % 4 == 0) & (year % 100 != 0)) | (year % 400 == 0))
dateSum += 29;
else dateSum += 28;
}
}

return dateSum = dateSum + day;
}本回答被提问者采纳
第3个回答  2009-10-14
public int orderDate( Date l_endDate ){
DateFormat df = new SimpleDateFormat("yyyyMMdd");
Calendar firstDay = Calendar.getInstance();
try {
firstDay.setTime(df.parse(df.format(date).substring(0,4)+"0101"));
} catch (ParseException e) {
e.printStackTrace();
}
long l_startTime = firstDay.getTimeInMillis();
long l_endTime = date.getTime();
long betweenDays = (long) ( ( l_endTime - l_startTime ) / ( 1000 * 60 * 60 * 24 ) );
return betweenDays;
}
相似回答