μΉ΄ν…Œκ³ λ¦¬ 보관물: Java

Java

Javaλ₯Ό μ‚¬μš©ν•˜μ—¬ 두 λ‚ μ§œ μ‚¬μ΄μ˜ λ‚ μ§œ 계산

두 λ‚ μ§œ μ‚¬μ΄μ˜ λ‚ μ§œλ₯Ό κ³„μ‚°ν•˜λŠ” Java ν”„λ‘œκ·Έλž¨μ΄ ν•„μš”ν•©λ‹ˆλ‹€.

  1. 첫 번째 λ‚ μ§œλ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€ (독일 ν‘œκΈ°λ²•; 곡백 포함 : β€œdd mm yyyy”)
  2. 두 번째 λ‚ μ§œλ₯Ό μž…λ ₯ν•˜μ‹­μ‹œμ˜€.
  3. ν”„λ‘œκ·Έλž¨μ€ 두 λ‚ μ§œ μ‚¬μ΄μ˜ 일 수λ₯Ό κ³„μ‚°ν•΄μ•Όν•©λ‹ˆλ‹€.

μœ€λ…„κ³Ό 여름을 μ–΄λ–»κ²Œ ν¬ν•¨μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆκΉŒ?

λ‚΄ μ½”λ“œ :

import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

public class NewDateDifference {

    public static void main(String[] args) {

        System.out.print("Insert first date: ");
        Scanner s = new Scanner(System.in);
        String[] eingabe1 = new String[3];

        while (s.hasNext()) {
            int i = 0;
            insert1[i] = s.next();
            if (!s.hasNext()) {
                s.close();
                break;
            }
            i++;
        }

        System.out.print("Insert second date: ");
        Scanner t = new Scanner(System.in);
        String[] insert2 = new String[3];

        while (t.hasNext()) {
            int i = 0;
            insert2[i] = t.next();
            if (!t.hasNext()) {
                t.close();
                break;
            }
            i++;
        }

        Calendar cal = Calendar.getInstance();

        cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert1[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(insert1[1]));
        cal.set(Calendar.YEAR, Integer.parseInt(insert1[2]));
        Date firstDate = cal.getTime();

        cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(insert2[0]));
        cal.set(Calendar.MONTH, Integer.parseInt(insert2[1]));
        cal.set(Calendar.YEAR, Integer.parseInt(insert2[2]));
        Date secondDate = cal.getTime();


        long diff = secondDate.getTime() - firstDate.getTime();

        System.out.println ("Days: " + diff / 1000 / 60 / 60 / 24);
    }
}


λ‹΅λ³€

μ—…λ°μ΄νŠΈ : 일뢀 ν΄λž˜μŠ€κ°€ κ΅μ²΄λ˜μ–΄ 2013 λ…„μ˜ μ›λž˜ 닡변이 κ΅¬μ‹μž…λ‹ˆλ‹€. 이 μž‘μ—…μ„ μˆ˜ν–‰ν•˜λŠ” μƒˆλ‘œμš΄ 방법은 μƒˆ java.time클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 것 μž…λ‹ˆλ‹€.

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";

try {
    LocalDateTime date1 = LocalDate.parse(inputString1, dtf);
    LocalDateTime date2 = LocalDate.parse(inputString2, dtf);
    long daysBetween = Duration.between(date1, date2).toDays();
    System.out.println ("Days: " + daysBetween);
} catch (ParseException e) {
    e.printStackTrace();
}

이 μ†”λ£¨μ…˜μ€ 달λ ₯ 일 μˆ˜κ°€ μ•„λ‹Œ μ‹€μ œ 24 μ‹œκ°„μ˜ 일 수λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. ν›„μžμ˜ 경우

long daysBetween = ChronoUnit.DAYS.between(date1, date2)

원문 λ‹΅λ³€ (μžλ°” 8 이전)

ν•„μš”ν•˜μ§€ μ•Šμ€ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. SimpleDateFormat그것에 λŒ€ν•œ μˆ˜μ—…μ΄ μžˆμŠ΅λ‹ˆλ‹€-이것을 μ‹œλ„ν•˜μ‹­μ‹œμ˜€ :

SimpleDateFormat myFormat = new SimpleDateFormat("dd MM yyyy");
String inputString1 = "23 01 1997";
String inputString2 = "27 04 1997";

try {
    Date date1 = myFormat.parse(inputString1);
    Date date2 = myFormat.parse(inputString2);
    long diff = date2.getTime() - date1.getTime();
    System.out.println ("Days: " + TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS));
} catch (ParseException e) {
    e.printStackTrace();
}

νŽΈμ§‘ : 이 μ½”λ“œμ˜ 정확성에 κ΄€ν•œ λͺ‡ κ°€μ§€ 토둠이 μžˆμ—ˆμœΌλ―€λ‘œ μ‹€μ œλ‘œ μœ€λ…„μ„ μ²˜λ¦¬ν•©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ TimeUnit.DAYS.convert밀리 μ΄ˆκ°€ 일둜 λ³€ν™˜λ˜λ―€λ‘œ ν•¨μˆ˜μ˜ 정밀도가 λ–¨μ–΄μ§‘λ‹ˆλ‹€ (μžμ„Έν•œ λ‚΄μš©μ€ 링크 된 λ¬Έμ„œ μ°Έμ‘°). 이것이 문제인 경우 diffμˆ˜λ™μœΌλ‘œ λ³€ν™˜ ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

float days = (diff / (1000*60*60*24));

이 floatκ°’ 은 λ°˜λ“œμ‹œ 값일 ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€ int.


λ‹΅λ³€

κ°€μž₯ κ°„λ‹¨ν•œ 방법 :

public static long getDifferenceDays(Date d1, Date d2) {
    long diff = d2.getTime() - d1.getTime();
    return TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
}

λ‹΅λ³€

Java 8μ—μ„œλŠ” LocalDateand λ₯Ό μ‚¬μš©ν•˜μ—¬μ΄λ₯Ό μˆ˜ν–‰ ν•  수 DateTimeFormatterμžˆμŠ΅λ‹ˆλ‹€. λ‘œλΆ€ν„° 의 Javadoc 의 LocalDate:

LocalDateλŠ” λ‚ μ§œλ₯Ό λ‚˜νƒ€λ‚΄λŠ” λ³€κ²½ λΆˆκ°€λŠ₯ν•œ λ‚ μ§œ-μ‹œκ°„ 객체이며, μ’…μ’… μ—°μ›”μΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ—¬ ꡬ성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ DateTimeFormatter. λ‹€μŒμ€ Javadoc 및 λ‚΄κ°€ μ‚¬μš©ν•œ κ΄€λ ¨ νŒ¨ν„΄ λ¬Έμžμž…λ‹ˆλ‹€.

기호 -의미- 프리젠 ν…Œμ΄μ…˜ -예

Y – λ…„μ˜ μ‹œλŒ€ – λ…„ – 2004; 04

M / L- λ…„- 숫자 / ν…μŠ€νŠΈ -7; 07; 7 μ›”; μΉ μ›”; 제이

d- μ›”- 숫자 -10

예λ₯Ό λ“€λ©΄ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;

public class Java8DateExample {
    public static void main(String[] args) throws IOException {
        final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MM yyyy");
        final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        final String firstInput = reader.readLine();
        final String secondInput = reader.readLine();
        final LocalDate firstDate = LocalDate.parse(firstInput, formatter);
        final LocalDate secondDate = LocalDate.parse(secondInput, formatter);
        final long days = ChronoUnit.DAYS.between(firstDate, secondDate);
        System.out.println("Days between: " + days);
    }
}

κ°€μž₯ 졜근의 μž…λ ₯ / 좜λ ₯ 예 :

23 01 1997
27 04 1997
Days between: 94

더 졜근의 첫 번째 :

27 04 1997
23 01 1997
Days between: -94

κΈ€μŽ„, 당신은 더 κ°„λ‹¨ν•œ λ°©λ²•μœΌλ‘œ 그것을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€ :

public static long betweenDates(Date firstDate, Date secondDate) throws IOException
{
    return ChronoUnit.DAYS.between(firstDate.toInstant(), secondDate.toInstant());
}

λ‹΅λ³€

일광 μ ˆμ•½ μ‹œκ°„μ΄ λ‹€κ°€ 왔을 λ•Œ λŒ€λΆ€λΆ„ / λͺ¨λ“  λ‹΅λ³€μ—μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. JodaTime을 μ‚¬μš©ν•˜μ§€ μ•Šκ³  λͺ¨λ“  λ‚ μ§œμ— λŒ€ν•œ μž‘μ—… μ†”λ£¨μ…˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€. 달λ ₯ 객체λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

public static int daysBetween(Calendar day1, Calendar day2){
    Calendar dayOne = (Calendar) day1.clone(),
            dayTwo = (Calendar) day2.clone();

    if (dayOne.get(Calendar.YEAR) == dayTwo.get(Calendar.YEAR)) {
        return Math.abs(dayOne.get(Calendar.DAY_OF_YEAR) - dayTwo.get(Calendar.DAY_OF_YEAR));
    } else {
        if (dayTwo.get(Calendar.YEAR) > dayOne.get(Calendar.YEAR)) {
            //swap them
            Calendar temp = dayOne;
            dayOne = dayTwo;
            dayTwo = temp;
        }
        int extraDays = 0;

        int dayOneOriginalYearDays = dayOne.get(Calendar.DAY_OF_YEAR);

        while (dayOne.get(Calendar.YEAR) > dayTwo.get(Calendar.YEAR)) {
            dayOne.add(Calendar.YEAR, -1);
            // getActualMaximum() important for leap years
            extraDays += dayOne.getActualMaximum(Calendar.DAY_OF_YEAR);
        }

        return extraDays - dayTwo.get(Calendar.DAY_OF_YEAR) + dayOneOriginalYearDays ;
    }
}

λ‹΅λ³€

κ°€μž₯ 쒋은 방법은 λ³΄λ„ˆμŠ€λ‘œ λ¬Έμžμ—΄λ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.)

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    try {
        //Dates to compare
        String CurrentDate=  "09/24/2015";
        String FinalDate=  "09/26/2015";

        Date date1;
        Date date2;

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

        //Setting dates
        date1 = dates.parse(CurrentDate);
        date2 = dates.parse(FinalDate);

        //Comparing dates
        long difference = Math.abs(date1.getTime() - date2.getTime());
        long differenceDates = difference / (24 * 60 * 60 * 1000);

        //Convert long to String
        String dayDifference = Long.toString(differenceDates);

        Log.e("HERE","HERE: " + dayDifference);
    }
    catch (Exception exception) {
        Log.e("DIDN'T WORK", "exception " + exception);
    }
}

λ‹΅λ³€

μ‚¬μš©ν•˜λ‹€:

public int getDifferenceDays(Date d1, Date d2) {
    int daysdiff = 0;
    long diff = d2.getTime() - d1.getTime();
    long diffDays = diff / (24 * 60 * 60 * 1000) + 1;
    daysdiff = (int) diffDays;
    return daysdiff;
}

λ‹΅λ³€

Java λ‚ μ§œ λΌμ΄λΈŒλŸ¬λ¦¬κ°€ μ†μƒλ˜μ—ˆμŠ΅λ‹ˆλ‹€. Joda Time 을 μ‚¬μš©ν•˜λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€ . μœ€λ…„, μ‹œκ°„λŒ€ 등을 κ΄€λ¦¬ν•©λ‹ˆλ‹€.

μ΅œμ†Œ μž‘μ—… 예 :

import java.util.Scanner;
import org.joda.time.DateTime;
import org.joda.time.Days;
import org.joda.time.LocalDate;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;

public class DateTestCase {

    public static void main(String[] args) {

        System.out.print("Insert first date: ");
        Scanner s = new Scanner(System.in);
        String firstdate = s.nextLine();
        System.out.print("Insert second date: ");
        String seconddate = s.nextLine();

        // Formatter
        DateTimeFormatter dateStringFormat = DateTimeFormat
                .forPattern("dd MM yyyy");
        DateTime firstTime = dateStringFormat.parseDateTime(firstdate);
        DateTime secondTime = dateStringFormat.parseDateTime(seconddate);
        int days = Days.daysBetween(new LocalDate(firstTime),
                                    new LocalDate(secondTime)).getDays();
        System.out.println("Days between the two dates " + days);
    }
}

이 글은 Java μΉ΄ν…Œκ³ λ¦¬λ‘œ λΆ„λ₯˜λ˜μ—ˆκ³  λ‹˜μ— μ˜ν•΄ 에 μž‘μ„±λμŠ΅λ‹ˆλ‹€.