вывод нескольких строк в консоль окон бесполезен. Он просто добавляет к нему пустые строки. К сожалению, путь относится к конкретным окнам и включает в себя либо conio.h (и clrscr () может не существовать, это тоже не стандартный заголовок), либо метод Win API
#include & lt; windows.h & gt; void ClearScreen () {HANDLE hStdOut; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD count; DWORD cellCount; COORD homeCoords = {0, 0}; hStdOut = GetStdHandle (STD_OUTPUT_HANDLE); if (hStdOut == INVALID_HANDLE_VALUE) return; / * Получить количество ячеек в текущем буфере * / if (! GetConsoleScreenBufferInfo (hStdOut, & amp; csbi)) return; cellCount = csbi.dwSize.X * csbi.dwSize.Y; / * Заполните весь буфер пробелами * / if (! FillConsoleOutputCharacter (hStdOut, (TCHAR) '', cellCount, homeCoords, & amp; count)) return; / * Заполните весь буфер текущими цветами и атрибутами * / if (! FillConsoleOutputAttribute (hStdOut, csbi.wAttributes, cellCount, homeCoords, & amp; count)) return; / * Переместить курсор домой * / SetConsoleCursorPosition (hStdOut, homeCoords); }
Для системы POSIX это проще, вы можете использовать ncurses или терминальные функции
#include & lt; unistd.h & gt; #include & lt; term.h & gt; void ClearScreen () {if (! cur_term) {int result; setupterm (NULL, STDOUT_FILENO, & amp; result); if (result & lt; = 0) return; } putp (tigetstr («clear»)); }
Пожалуйста, обратитесь к этому коду, это может вам помочь.
public String getCountOfDays(String createdDateString, String expireDateString) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.getDefault());
Date createdConvertedDate = null, expireCovertedDate = null, todayWithZeroTime = null;
try {
createdConvertedDate = dateFormat.parse(createdDateString);
expireCovertedDate = dateFormat.parse(expireDateString);
Date today = new Date();
todayWithZeroTime = dateFormat.parse(dateFormat.format(today));
} catch (ParseException e) {
e.printStackTrace();
}
int cYear = 0, cMonth = 0, cDay = 0;
if (createdConvertedDate.after(todayWithZeroTime)) {
Calendar cCal = Calendar.getInstance();
cCal.setTime(createdConvertedDate);
cYear = cCal.get(Calendar.YEAR);
cMonth = cCal.get(Calendar.MONTH);
cDay = cCal.get(Calendar.DAY_OF_MONTH);
} else {
Calendar cCal = Calendar.getInstance();
cCal.setTime(todayWithZeroTime);
cYear = cCal.get(Calendar.YEAR);
cMonth = cCal.get(Calendar.MONTH);
cDay = cCal.get(Calendar.DAY_OF_MONTH);
}
/*Calendar todayCal = Calendar.getInstance();
int todayYear = todayCal.get(Calendar.YEAR);
int today = todayCal.get(Calendar.MONTH);
int todayDay = todayCal.get(Calendar.DAY_OF_MONTH);
*/
Calendar eCal = Calendar.getInstance();
eCal.setTime(expireCovertedDate);
int eYear = eCal.get(Calendar.YEAR);
int eMonth = eCal.get(Calendar.MONTH);
int eDay = eCal.get(Calendar.DAY_OF_MONTH);
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
date1.clear();
date1.set(cYear, cMonth, cDay);
date2.clear();
date2.set(eYear, eMonth, eDay);
long diff = date2.getTimeInMillis() - date1.getTimeInMillis();
float dayCount = (float) diff / (24 * 60 * 60 * 1000);
return ("" + (int) dayCount + " Days");
}
наилучшим образом: -
long fromCalender = Calender.getInstance();
fromCalender.set...// set the from dates
long toCalender = Calender.getInstance();
fromCalender.set...// set the to dates
long diffmili = fromCalender - toCalender;
long hours = TimeUnit.MILLISECONDS.toHours(diffmili);
long days = TimeUnit.MILLISECONDS.toDays(diffmili);
long min = TimeUnit.MILLISECONDS.toMinutes(diffmili);
long sec = TimeUnit.MILLISECONDS.toSeconds(diffmili);
это стандартный и лучший способ:
SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy");
try {
java.util.Date date1 = myFormat.parse(date1); //for example 1/1/2017
java.util.Date date2 = myFormat.parse(date2); //for example 5/1/2017
long diff = date2.getTime() - date1.getTime();
System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS)); // Days : 5
} catch (ParseException e) {
e.printStackTrace();
}
Наконец-то я нашел самый простой способ справиться с этим. Вот мой код:
public int getTimeRemaining()
{
Calendar sDate = toCalendar(this.dateEvent);
Calendar eDate = toCalendar(System.currentTimeMillis());
// Get the represented date in milliseconds
long milis1 = sDate.getTimeInMillis();
long milis2 = eDate.getTimeInMillis();
// Calculate difference in milliseconds
long diff = Math.abs(milis2 - milis1);
return (int)(diff / (24 * 60 * 60 * 1000));
}
private Calendar toCalendar(long timestamp)
{
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timestamp);
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
return calendar;
}
Надеюсь, это поможет.
public long Daybetween(String date1,String date2,String pattern)
{
SimpleDateFormat sdf = new SimpleDateFormat(pattern,Locale.ENGLISH);
Date Date1 = null,Date2 = null;
try{
Date1 = sdf.parse(date1);
Date2 = sdf.parse(date2);
}catch(Exception e)
{
e.printStackTrace();
}
return (Date2.getTime() - Date1.getTime())/(24*60*60*1000);
}
Date userDob = new SimpleDateFormat("yyyy-MM-dd").parse(dob);
Date today = new Date();
long diff = today.getTime() - userDob.getTime();
int numOfYear = (int) ((diff / (1000 * 60 * 60 * 24))/365);
int numOfDays = (int) (diff / (1000 * 60 * 60 * 24));
int hours = (int) (diff / (1000 * 60 * 60));
int minutes = (int) (diff / (1000 * 60));
int seconds = (int) (diff / (1000));
Вы никогда не должны использовать формулу 24 * 60 * 60 * 1000! Зачем? Потому что есть дневная экономия времени, и не все дни имеют 24 часа, а также о високосном году, который имеет +1 день. Вот почему есть класс календаря. Если вы не хотите размещать внешнюю библиотеку в своем проекте, например Jodatime, вы можете использовать класс pure Calendar с очень эффективной функцией:
public static int numDaysBetween(final Calendar c, final long fromTime, final long toTime) {
int result = 0;
if (toTime <= fromTime) return result;
c.setTimeInMillis(toTime);
final int toYear = c.get(Calendar.YEAR);
result += c.get(Calendar.DAY_OF_YEAR);
c.setTimeInMillis(fromTime);
result -= c.get(Calendar.DAY_OF_YEAR);
while (c.get(Calendar.YEAR) < toYear) {
result += c.getActualMaximum(Calendar.DAY_OF_YEAR);
c.add(Calendar.YEAR, 1);
}
return result;
}
Лучшее решение, которое сработало для меня, это:
private static int findDaysDiff(long unixStartTime,long unixEndTime)
{
Calendar calendar1 = Calendar.getInstance();
calendar1.setTimeInMillis(unixStartTime);
calendar1.set(Calendar.HOUR_OF_DAY, 0);
calendar1.set(Calendar.MINUTE, 0);
calendar1.set(Calendar.SECOND, 0);
calendar1.set(Calendar.MILLISECOND, 0);
Calendar calendar2 = Calendar.getInstance();
calendar2.setTimeInMillis(unixEndTime);
calendar2.set(Calendar.HOUR_OF_DAY, 0);
calendar2.set(Calendar.MINUTE, 0);
calendar2.set(Calendar.SECOND, 0);
calendar2.set(Calendar.MILLISECOND, 0);
return (int) ((calendar2.getTimeInMillis()-calendar1.getTimeInMillis())/(24 * 60 * 60 * 1000));
}
Поскольку он сначала преобразует Hour
, Minute
, Second
и Millisecond
в 0
, и теперь разница будет быть только в днях.
Сделайте так, чтобы он поддерживал все уровни Api
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat("MMM dd yyyy HH:mm:ss",
Locale.ENGLISH);
try {
String datestart="June 14 2018 16:02:37";
cal.setTime(sdf.parse(datestart));// all done
Calendar cal1=Calendar.getInstance();
String formatted = sdf.format(cal1.getTime());//formatted date as i want
cal1.setTime(sdf.parse(formatted));// all done
long msDiff = cal1.getTimeInMillis() - cal.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff);
Toast.makeText(this, "days="+daysDiff, Toast.LENGTH_SHORT).show();
} catch (ParseException e) {
e.printStackTrace();
}
Вот двухлинейное решение:
long msDiff = Calendar.getInstance().getTimeInMillis() - testCalendar.getTimeInMillis();
long daysDiff = TimeUnit.MILLISECONDS.toDays(msDiff);
В этом примере он получает количество дней между датой «testCalendar» и текущей датой.
У меня была такая же потребность, я, наконец, закончил использование Joda Time, это очень удобно и предлагает множество дополнительных функций, включая тот, который вы ищете.
Вы можете загрузить файлы из здесь .
После того, как вы включили файл jar в свой проект, вы можете легко сделать, например, следующее:
int daysBetween = Days.daysBetween(new DateTime(sDate), new DateTime(eDate)).getDays();
date1
указывает на ту же дату, что иdate2
– Manitoba 27 April 2014 в 14:58long diff = date2.getTimeInMillis() - date1.getTimeInMillis(); float dayCount = (float) diff / (24 * 60 * 60 * 1000);
– Bram 3 January 2015 в 19:45