如何使用当年的某一天找到当月的日期?
if(day >=1 && day <=31)
{
month = 1;
monthName = "January";
}
我有一天和一年的输入。我将年份分为12个月。
答案 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年。