我怎樣才能找到每月使用一年中的哪一天?這個月中的哪一天是
if(day >=1 && day <=31)
{
month = 1;
monthName = "January";
}
我有一天和一年的輸入。我把年份分成12個月。
我怎樣才能找到每月使用一年中的哪一天?這個月中的哪一天是
if(day >=1 && day <=31)
{
month = 1;
monthName = "January";
}
我有一天和一年的輸入。我把年份分成12個月。
你可以做這樣的事情:
創建和包含的天數爲每個陣列月:
int[] daysInMonth=new int[13];
int[1]=31; // January (month 1) has 31 days
int[2]=28; // or 29 if it's a leap year
依此類推。請注意,我創建了一個陣列的13個職位,但我忽略了位置0
只是爲了讓1月擔任本月1而不是0
然後,你做這樣的一個循環:
int n = // day of year
for (int i = 1; i < daysInMonth.length; i++) {
if(n <= daysInMonth[i])
break;// n is the day of month i
else n -= daysInMonth[i];
}
如果我已經給出了像上面編輯的代碼那樣的月份值,該怎麼辦? – Survivorr
我認爲你應該選擇使用上面的循環還是使用很多ifs(比如你的原始代碼)。在我建議的循環中,你不需要使用「如果」。 – 2017-03-01 15:10:16
這裏是你的問題的一個簡單的實現,不需要任何進口:
public class DaysToDayOfMonth {
public static void main(String []args){
// a leap year has 366 days
int[] x = ConvertDaysToDayOfMonth(true, 366);
System.out.println("month:" + x[0] + " day: " + x[1]);
// in leap years 60 is feb 29
x = ConvertDaysToDayOfMonth(true, 60);
System.out.println("month:" + x[0] + " day: " + x[1]);
// if it is not a leap year, 60 is march 1
x = ConvertDaysToDayOfMonth(false, 60);
System.out.println("month:" + x[0] + " day: " + x[1]);
}
public static int[] ConvertDaysToDayOfMonth(boolean leapYear, int days) {
int month = 0;
int dayOfMonth = days;
if(dayOfMonth <= 31) return new int[] {month, dayOfMonth};
dayOfMonth -= 31;
month++;
int febdays = (leapYear ? 29 : 28);
if(dayOfMonth <= febdays) return new int[] {month, dayOfMonth};
dayOfMonth -= febdays;
month++;
// march to july
for(int i = 0; i < 5; i++) {
int monthdays = (i%2==0 ? 31 : 30);
if(dayOfMonth <= monthdays) return new int[]{month, dayOfMonth};
dayOfMonth -= monthdays;
month++;
}
// august to december
for(int i = 0; i < 5; i++) {
int monthdays = (i%2==0 ? 31 : 30);
if(dayOfMonth <= monthdays) return new int[]{month, dayOfMonth};
dayOfMonth -= monthdays;
month++;
}
return new int[]{month, dayOfMonth};
}
}
我覺得這個代碼將幫助您找到您輸入的日期。您提供的輸入稱爲Julian日曆。您可以參考此代碼以供參考。
public class TestClass8
{
public static void main(String[] args) throws IOException, ParseException
{
Calendar cal = Calendar.getInstance();
cal.setTime(getFormattedJulianDateOfString("dddyy", "3216"));
System.out.println("day :"+cal.get(Calendar.DAY_OF_MONTH));
System.out.println("month :"+cal.get(Calendar.MONTH));
System.out.println("year :"+cal.get(Calendar.YEAR));
}
public static Date getFormattedJulianDateOfString(String dateFormat, String dateString)
throws ParseException
{
Date uploadedDate = null;
if(StringUtils.countMatches(dateFormat, "y") == 0)
{
dateFormat = dateFormat.concat("yy");
dateString = dateString.concat(getFormattedDate(new Date(), "yy"));
if(dateFormat.length() != dateString.length())
{
for(int i= 0; i < Math.abs(dateString.length() - dateFormat.length()); i++)
{
dateString = "0"+dateString;
}
}
uploadedDate = getFormattedUploadedDate(dateFormat, dateString, true);
}
if(StringUtils.countMatches(dateFormat, "y") == 1)
{
dateFormat = dateFormat.concat("y");
String currentYear = getFormattedDate(new Date(), "yy");
currentYear = StringUtils.substring(currentYear, 0, currentYear.length() - 1);
currentYear = currentYear.concat(StringUtils.substring(dateString, dateString.length() - 1,
dateString.length()));
dateString = StringUtils.substring(dateString, 0, dateString.length() - 1);
dateString = dateString.concat(currentYear);
if(dateFormat.length() != dateString.length())
{
dateString = "0"+dateString;
}
uploadedDate = getFormattedUploadedDate(dateFormat, dateString, true);
}
if(StringUtils.countMatches(dateFormat, "y") == 2)
{
uploadedDate = getFormattedUploadedDate(dateFormat, dateString, true);
}
return uploadedDate;
}
public static String getFormattedDate(Date date, String requiredFormat)
{
String formattedDate = "";
DateFormat formatter = new SimpleDateFormat(requiredFormat);
formattedDate = formatter.format(date);
return formattedDate;
}
public static Date getFormattedUploadedDate(String dateFormat, String dateString, boolean isJulianDateFormat)
throws ParseException
{
Date date = null;
DateFormat sdf = new SimpleDateFormat(dateFormat);
if(!isJulianDateFormat)
{
sdf.setLenient(false);
}
date = sdf.parse(dateString);
if(!isJulianDateFormat && !dateString.equals(sdf.format(date)))
{
date = null;
}
return date;
}
}
最後,您可以根據您的輸入得到月份的日期,年份的月份和年份。
您必須爲方法getFormattedJulianDateOfString()提供輸入作爲您需要轉換的日期格式,如ddd,dddy,dddyy。
如果你給的日期格式參數作爲DDD,那麼你必須提供一天dateString的參數的數量,你像18或32喜歡你的提問時說。
如果你給DATEFORMAT參數作爲dddy,那麼你必須提供一天dateString的參數的數量,18是一年中的一天,6是說,2016年。
如果你給DATEFORMAT參數作爲dddy,那麼你必須提供一天dateString的參數的數量,18是一年中的一天,16是說,在今年的
你的約束是什麼?你可以使用內置的API嗎?如果可以,您是否檢查了API以找出可用的內容?如果你這樣做了,你發現了什麼,爲什麼它不適合你? – MadProgrammer
如果不知道年份,你無法做到。 – shmosel
沒有API並且沒有日曆 – Survivorr