Как отобразить n дней в качестве даты, если предположить, что 1 год равен 360 дней в Java?

1

вот мой код,

      int txtSubsDay = Integer.parseInt(this.textSubDay.getText());
      int txtDay = Integer.parseInt(this.textDay.getText());
      int txtMonth = Integer.parseInt(this.textMonth.getText());
      int txtYear = Integer.parseInt(this.textYear.getText());
      int daysToSubs = txtSubsDay;

      int convertedYears = (int)(daysToSubs / 360);
      int convertedMonths = (int)((daysToSubs % 360) / 30);
      int convertedDays = (int)((daysToSubs % 360) % 30);          

      Calendar calendar = new GregorianCalendar(txtYear, txtMonth-1, txtDay);
      calendar.add(Calendar.MONTH, -convertedMonths);
      calendar.add(Calendar.DAY_OF_MONTH, -convertedDays);
      calendar.add(Calendar.YEAR, -convertedYears);
      SimpleDateFormat dateFormat = new SimpleDateFormat("dd MM yyyy");
      SimpleDateFormat dayFormat = new SimpleDateFormat("d MMM yyyy");
      String lastDate = dateFormat.format(calendar.getTime());
      String lastDate2 = dayFormat.format(calendar.getTime());
      labelOutput.setText(lastDate);
      labelOutput2.setText(lastDate2);

Это то, что я хотел.////////////////////////////////////////это сэкономило мое время,

  • 1
    что вы пробовали до сих пор?
  • 0
    Просто используйте Duration .
Показать ещё 7 комментариев
Теги:
function
calendar

2 ответа

2
Лучший ответ
int totalDays = 548;

int years = (int)(totalDays / 360);
int months = (int((totalDays % 360) / 30);
int days = (int)((totalDays % 360) % 30);

System.out.println("years: " + years + "; months: " + months + "; days: " + days);

// Result: years: 1; months: 6; days: 8

Тем не менее, я не совсем понимаю, почему вы настаиваете на использовании 360 лет и 30 месяцев. Если вы хотите просто вычесть дни с одной даты для получения правильной даты в прошлом, используйте вместо этого:

SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");

Date dateInstance = dateFormat.parse("27/07/2015");
int daysSubstracted = 548;

Calendar cal = Calendar.getInstance();
cal.setTime(dateInstance);
cal.add(Calendar.DATE, -daysSubstracted);
Date dateInPast = cal.getTime();

System.out.println(dateFormat.format(dateInPast));

// Result: 25/01/2014
  • 0
    когда мы рассчитываем дни для пенсионного страхования, мы должны принять один год как 360 дней, поэтому он мне и нужен. Как ваш расчет, это хорошо, но когда он вычитает, он рассчитывает месяцы, которые имеют 31 день, поэтому, если дата 27/07/2015 и вычтенные дни 548, я должен получить 19/01/2015. Не 25.01.2015
  • 0
    Это мне очень помогло Спасибо. Я вставляю последнюю версию своего кода. Благодаря тебе я получил то, что хотел.
0

вам нужно найти количество дней между двумя датами

//we have two dates, now and day 0 
Date d1 = new Date(0); 
Date d2 = new Date();
//substract times from each other, and divide this by number milisecond in day
int days =(int)((d2.getTime()-d1.getTime()) /(1000*60*60 *24) );

//and display your result
System.out.println(days+" days = "+(days/360)+" years "+((days%360)/30)+" month "+days%30);
  • 0
    Я не понял, как вы определили 16475 дней.
  • 0
    Метод @Ert getTime() возвращает количество миллисекунд с 1 января 1970 года, 00:00:00. поскольку d1 - 1 января 1970 года, а d2 - текущий день, дни должны быть равны количеству дней между этими датами.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню