我怎样才能找到每月使用一年中的哪一天?这个月中的哪一天是
if(day >=1 && day <=31)
{
month = 1;
monthName = "January";
}
我有一天和一年的输入。我把年份分成12个月。
我怎样才能找到每月使用一年中的哪一天?这个月中的哪一天是
if(day >=1 && day <=31)
{
month = 1;
monthName = "January";
}
我有一天和一年的输入。我把年份分成12个月。
你可以做这样的事情:
创建和包含的天数为每个阵列月:
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];
}
如果我已经给出了像上面编辑的代码那样的月份值,该怎么办? – Survivorr
我认为你应该选择使用上面的循环还是使用很多ifs(比如你的原始代码)。在我建议的循环中,你不需要使用“如果”。 – 2017-03-01 15:10:16
这里是你的问题的一个简单的实现,不需要任何进口:
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};
}
}
我觉得这个代码将帮助您找到您输入的日期。您提供的输入称为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是说,在今年的
你的约束是什么?你可以使用内置的API吗?如果可以,您是否检查了API以找出可用的内容?如果你这样做了,你发现了什么,为什么它不适合你? – MadProgrammer
如果不知道年份,你无法做到。 – shmosel
没有API并且没有日历 – Survivorr