2017-03-01 65 views
0

我怎樣才能找到每月使用一年中的哪一天?這個月中的哪一天是

if(day >=1 && day <=31) 
{ 
    month = 1; 
    monthName = "January"; 
} 

我有一天和一年的輸入。我把年份分成12個月。

+3

你的約束是什麼?你可以使用內置的API嗎?如果可以,您是否檢查了API以找出可用的內容?如果你這樣做了,你發現了什麼,爲什麼它不適合你? – MadProgrammer

+0

如果不知道年份,你無法做到。 – shmosel

+0

沒有API並且沒有日曆 – Survivorr

回答

1

你可以做這樣的事情:

創建和包含的天數爲每個陣列月:

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]; 
} 
+0

如果我已經給出了像上面編輯的代碼那樣的月份值,該怎麼辦? – Survivorr

+0

我認爲你應該選擇使用上面的循環還是使用很多ifs(比如你的原始代碼)。在我建議的循環中,你不需要使用「如果」。 – 2017-03-01 15:10:16

1

這裏是你的問題的一個簡單的實現,不需要任何進口:

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}; 
    } 
} 
1

我覺得這個代碼將幫助您找到您輸入的日期。您提供的輸入稱爲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是說,在今年的

相關問題