这个月的哪一天

时间:2017-03-01 01:32:01

标签: java

如何使用当年的某一天找到当月的日期?

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

我有一天和一年的输入。我将年份分为12个月。

3 个答案:

答案 0 :(得分: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 :(得分: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];
}

答案 2 :(得分: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()提供输入作为你需要转换的dateFormat,如 ddd,dddy,dddyy

如果您将日期格式参数设为 ddd ,那么您必须在问题中提供dateString参数中的日期编号,如 18或32 喜欢。

如果您将dateFormat参数指定为 dddy ,则必须将dateString参数中的日期编号提供为 186 ,18是一年中的某一天而6表示2016年。

如果您将dateFormat参数指定为 dddy ,则必须将dateString参数中的日期编号提供为 1816 ,18是一年中的某一天16表示2016年。