2017-03-01 70 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是说,在今年的

相关问题