2017-03-01 3 views
0

Wie kann ich den Tag des Monats mit dem Tag des Jahres finden?Welcher Tag des Monats ist es

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

Ich habe eine Eingabe Tag und Jahr. Ich habe Jahr Tage in 12 Monate getrennt.

+3

Was sind Ihre Einschränkungen? Können Sie die integrierten APIs verwenden? Wenn Sie können, haben Sie die APIs überprüft, um herauszufinden, was verfügbar ist? Wenn ja, was hast du gefunden, warum hat es nicht für dich funktioniert? – MadProgrammer

+0

Sie können es nicht tun, ohne das Jahr zu kennen. – shmosel

+0

Keine APIs und kein Kalender – Survivorr

Antwort

1

Sie so etwas tun könnte:

erstellen und Array, das die Anzahl der Tage für jede enthält Monat:

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 

Und so weiter. Beachten Sie, dass ich ein Array mit 13 Positionen erstellt, aber ich bin Position ignorieren 0 nur 1. JANUAR als Monat machen statt 0

Dann Sie eine Schleife wie das tun:

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

Was ist, wenn ich bereits einen Wert für den Monat angegeben habe, wie in dem Code, den ich oben bearbeitet habe? – Survivorr

+0

Ich denke, Sie sollten zwischen der Verwendung der obigen Schleife wählen oder viele IFS verwenden (wie Ihren ursprünglichen Code).In der Schleife, die ich vorgeschlagen habe, brauchst du dieses "Wenn" nicht. –

1

Hier ist ein straight forward-Implementierung für Ihr Problem, die keine Importe benötigt:

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

glaube ich diesen Code wird Ihnen helfen, das Datum für Ihre Eingabe zu finden. Die von Ihnen angegebene Eingabe heißt Julian Calendar. Sie können diesen Code für Ihre Referenz verweisen.

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

Schließlich können Sie den Tag des Monats, Monat des Jahres und das Jahr als Ergebnis für Ihre Eingabe erhalten.

Sie haben Eingang für das Verfahren getFormattedJulianDateOfString geben() als Datumsformat, die Sie wie ddd konvertieren müssen, dddy, dddyy.

Wenn Sie das Datumsformat Argument geben als ddd dann müssen Sie die Nummer des Tages im Argument von datestring bieten, wie Sie in Ihrer Frage wie gesagt 18 oder 32 mögen.

Wenn Sie das Datumsformat Argument geben als dddy dann müssen Sie die Nummer des Tages im Argument von datestring bieten als , 18 ist der Tag des Jahres und 6 ist, sagt, dass das Jahr 2016 Wenn Sie das Datumsformat Argument als dddy dann müssen Sie liefern die Nummer des Tages im Argument von datestring als , 18 ist der Tag des Jahres.

geben und 16 ist, sagt, dass das Jahr von 2016.

Verwandte Themen