জাভাতে সময়ের পার্থক্য গণনা করবেন কীভাবে?


98

আমি দুটি টাইমপিরিয়ডকে বিয়োগ করতে চাই 19:00:00 থেকে 16:00:00 পর্যন্ত। এর জন্য কি কোন জাভা ফাংশন রয়েছে? ফলাফলগুলি মিলি সেকেন্ড, সেকেন্ড বা মিনিটে হতে পারে।


উত্তর:


118
String time1 = "16:00:00";
String time2 = "19:00:00";

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
Date date1 = format.parse(time1);
Date date2 = format.parse(time2);
long difference = date2.getTime() - date1.getTime(); 

পার্থক্যটি মিলি সেকেন্ডে।

আমি sfaizs পোস্ট পরিবর্তন ।


7
অন্য উপায় কি? 16:00 - 19:00? আমি কীভাবে এটি গণনা করতে পারি?
অ্যালেক্স কাপুস্টিয়ান

ভেরিয়েবলগুলি উল্টিয়ে দেওয়া খুব ভাল কাজ করে না .. উদাহরণস্বরূপ, নিশ্চিত যে আপনি এগুলি উল্টাতে পারেন এবং পরম মান বা কিছু নিতে পারেন। তবে আপনার মধ্যরাত (00:00) হলে কি হবে?
rj2700

4
23:15:00 - 01:15:00 সম্পর্কে কি?
ওলেকসান্দ্র

আজ 08:00:00 এবং গতকাল 10:00:00 এর মধ্যে পার্থক্য সম্পর্কে কি ??????? আমি মনে করি না আপনি যা পরামর্শ দিয়েছেন সেটি একটি ভাঙ্গা যুক্তি is
চান্ডে

113

জাভা 8 এর একটি ক্লিনার সমাধান রয়েছে - তাত্ক্ষণিক এবং সময়কাল

উদাহরণ:

import java.time.Duration;
import java.time.Instant;
...
Instant start = Instant.now();
//your code
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
System.out.println("Time taken: "+ timeElapsed.toMillis() +" milliseconds");

আপনার উত্তরটি আমি সত্যিই পছন্দ করেছি। খুব ইজিলেন্ট! :)
অবিনাশ

সুতরাং এটি দুটি আমদানিতে এবং System.out.println("Duration: " + String.valueOf(Duration.between(outerstart, Instant.now()).toMillis()));সময়কাল লগ ইন করতে পারে। আমি ফোন না যে Java8 একটি সুন্দর ও পরিচ্ছন্ন হওয়া সমাধান অন্যান্য ভাষায় মত কোড দিয়ে এটা করতে পারেন যদি print("Duration: " + str(time.time()-start))...
লুক

4
@ পরিষ্কার পরিচ্ছন্নতা ব্রেভিটি হিসাবে একই নয়। এটি জাভা 8 সংস্করণে ঠিক কী ঘটছে তা অনেক পরিষ্কার এবং উদাহরণস্বরূপ, আপনি যদি মিলিসেকেন্ড ব্যতীত অন্য ইউনিটে দুটি তাত্ক্ষণিকের মধ্যে বা একাধিক ইউনিট হিসাবে (যেমন: 1h 15m 3.022sপরিবর্তে 4503022 milliseconds) দু'টি তাত্ক্ষণিক সময়ের জন্য প্রতিবেদন করতে চান তবে এটি খুব সহজেই চিহ্নিত করা যায় twe ।
জেকরবব

41

সুন্দর সময় পার্থক্য পেতে, তারপর

// d1, d2 are dates
long diff = d2.getTime() - d1.getTime();

long diffSeconds = diff / 1000 % 60;
long diffMinutes = diff / (60 * 1000) % 60;
long diffHours = diff / (60 * 60 * 1000) % 24;
long diffDays = diff / (24 * 60 * 60 * 1000);

System.out.print(diffDays + " days, ");
System.out.print(diffHours + " hours, ");
System.out.print(diffMinutes + " minutes, ");
System.out.print(diffSeconds + " seconds.");

সত্যিই দুর্দান্ত উত্তর
পালানীভালরাগুল

32

জাভা 8

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

LocalDateTime dateTime1= LocalDateTime.parse("2014-11-25 19:00:00", formatter);
LocalDateTime dateTime2= LocalDateTime.parse("2014-11-25 16:00:00", formatter);

long diffInMilli = java.time.Duration.between(dateTime1, dateTime2).toMillis();
long diffInSeconds = java.time.Duration.between(dateTime1, dateTime2).getSeconds();
long diffInMinutes = java.time.Duration.between(dateTime1, dateTime2).toMinutes();

4
এটি জাভা এসই 6 এবং 7 ব্যাক পোর্ট হিসাবে পাশাপাশি অ্যান্ড্রয়েডের জন্যও উপলব্ধ ।
ব্রায়ান

11

ঠিক অন্য কোনও ভাষার মতো; আপনার সময়কালকে একটি ইউনিক্স টাইমস্ট্যাম্পে রূপান্তর করুন (যেমন, ইউনিক্সের পর্বের সময় থেকে কয়েক সেকেন্ড) এবং তারপরে কেবল বিয়োগ করুন। তারপরে, ফলাফলটি সেকেন্ডগুলিকে নতুন ইউনিক্স টাইমস্ট্যাম্প হিসাবে ব্যবহার করা উচিত এবং আপনি যে কোনও ফর্ম্যাটটিতে ফর্ম্যাট করতে চান read

আহ, উপরের পোস্টারটি (জেনিসিস) তার যথাযথ ক্রেডিট দিন, কোডটি সর্বদা সুবিধাজনক;) যদিও আপনার এখন একটি ব্যাখ্যাও রয়েছে :)


8
import java.util.Date;
...
Date d1 = new Date();
...
...
Date d2 = new Date();
System.out.println(d2.getTime()-d1.getTime()); //gives the time difference in milliseconds. 
System.out.println((d2.getTime()-d1.getTime())/1000); //gives the time difference in seconds.

এবং, একটি ভাল বিন্যাসে প্রদর্শন করতে, আপনি ব্যবহার করতে পারেন:

    DecimalFormat myDecimalFormatter = new DecimalFormat("###,###.###");
    System.out.println(myDecimalFormatter.format(((double)d2.getTime()-d1.getTime())/1000));

এটি অন্য উত্তরটির সদৃশ এবং কোনও নতুন সামগ্রী যুক্ত করে না। অবদানের জন্য আপনার কাছে নতুন কিছু না থাকলে দয়া করে কোনও উত্তর পোস্ট করবেন না।
ডেভিডপস্টিল

@ ডেভিডপস্টিল, আপনার মাথা আপ করার জন্য আপনাকে ধন্যবাদ তবে জেনেসিসের পোস্টে আমার নিজের সমাধানটি খুঁজে পেতে এবং সমাধানটি খুঁজে পাওয়া যায়নি তা হল দুটি লাইন কোডের প্রয়োগের (যেমন প্রারম্ভিক বিন্দু এবং প্রোগ্রামের শেষের পয়েন্ট বা কোনও পদ্ধতি চালানোর আগে এবং পরে, কোনও স্থির সময় নয়) সময়ের পার্থক্য was । আমি ভেবেছিলাম এটি সাহায্য করতে পারে।
আলিসা

3

পিরিয়ড এবং সময়কাল অবজেক্টগুলির সাথে সর্বাধিক প্রচলিত পদ্ধতির পাশাপাশি আপনি জাভাতে সময় কাটানোর জন্য অন্য উপায়ের সাথে আপনার জ্ঞানকে প্রশস্ত করতে পারেন।

উন্নত জাভা 8 গ্রন্থাগার। পার্থক্যগুলির জন্য ক্রোনোইনিত

দুটি টেম্পোরাল মানগুলি কতটা পৃথক তা নির্ধারণ করার জন্য ক্রোনোইনিত একটি দুর্দান্ত উপায়। টেম্পোরালটিতে লোকালডেট , লোকালটাইম এবং আরও কিছু রয়েছে।

LocalTime one = LocalTime.of(5,15);
LocalTime two = LocalTime.of(6,30);
LocalDate date = LocalDate.of(2019, 1, 29);

System.out.println(ChronoUnit.HOURS.between(one, two)); //1
System.out.println(ChronoUnit.MINUTES.between(one, two)); //75
System.out.println(ChronoUnit.MINUTES.between(one, date)); //DateTimeException

প্রথম উদাহরণটি দেখায় যে গোলগুলি না করে কাটছাঁটের মধ্যে।

দ্বিতীয়টি দেখায় যে বিভিন্ন ইউনিট গণনা করা কতটা সহজ।

এবং শেষ উদাহরণটি মনে করিয়ে দেয় যে জাভাতে তারিখ এবং সময়গুলি নিয়ে আমাদের গণ্ডগোল করা উচিত নয় :)


2

বেদনাদায়ক উপায়টি হ'ল মিলিসে রূপান্তর করা এবং বিয়োগফলটি করা এবং তারপরে যা কিছু সেকেন্ড বা তাই আপনি চান তা ফিরে। আরও ভাল উপায় জোডটাইম ব্যবহার করা হয়


4
আমি কখনই ইউনিক্স টাইমস্ট্যাম্পের কথা উল্লেখ করি নি। এছাড়াও এটি একটি সুপরিচিত সত্য যে জাভা তারিখ এবং সময় এপিআই সুবিধাজনক ব্যবহারের চেয়ে বেশি ব্যবহার করে। জোডাটাইম অনেক ভাল এবং সম্ভবত জেএসআর 310 অবধি জাভা অংশ হিসাবে যাওয়ার উপায়। সোর্সফোর্জ.नेट
ম্যানফ্রেড মোসার

@ ম্যানফ্রেড মোসার: আপনার থাকতে পারে ... ডিফল্ট জাভা টাইম ক্লাস এবং জোদা উভয়ই মিলিতে সময় দিতে পারে যা ইউনিক্সের যুগ থেকে শুরু হয় । এই মুহুর্তে তারা ইউনিক্স টাইমস্ট্যাম্পগুলির নিকটে ঘেঁষে পরিণত হয় (একটি মিলিসে থাকে, অন্যটি কয়েক সেকেন্ডে)। যে কোনও ক্ষেত্রে ওপি যা চায় তা ডিফল্ট জাভা ক্লাস ব্যবহার করে তুচ্ছভাবে করা যেতে পারে, ইউনিক্সের যুগ থেকে মিলির সংখ্যা গ্রহণ করে এবং সেগুলি বাদ দিয়ে subst
SyntaxT3rr0r

4
অবশ্যই এটি তুচ্ছভাবে করা যেতে পারে। এবং আপনি যদি আপনার অ্যাপ্লিকেশনে প্রচুর তারিখ এবং সময় গণনা করেন তবে আপনিও তুচ্ছভাবে নিজেকে প্রচুর বাগ তৈরি করতে পারেন এবং নিজের সামান্য লাইব্রেরি পুনরায় জোডটাইমের অংশগুলি বাস্তবায়ন করতে পারেন। একটি সাধারণ গণনার জন্য যা ঠিক হতে পারে তবে ঘন ঘন ব্যবহারের জন্য এটি একটি শালীন গ্রন্থাগারটি ব্যবহার করা উপযুক্ত। আমি কেবল এই বিষয়টি তুলে ধরার চেষ্টা করছি যে প্রথম সহজ সমাধান আপনাকে সেরা পথে পরিচালিত করবে না। তাতে কী ভুল?
ম্যানফ্রেড মশার

4
@ ম্যানফ্রেড মোসার: আসলে প্রথম সহজ সমাধানটি হ'ল সঠিক পথ, বিবেচনা করে ওপি দুটি সময়সীমার পার্থক্য চেয়েছিল, পারমাণবিক ঘড়ির পরিবর্তনে নয় :)
খ্রিস্টান

অবশ্যই .. এই উদাহরণ এবং নির্দিষ্ট প্রশ্নের জন্য। যদিও বড় ছবির জন্য নয়।
মনফ্রেড মশার

2
String start = "12:00:00";
String end = "02:05:00";

SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss"); 

Date date1 = format.parse(start);

Date date2 = format.parse(end);

long difference = date2.getTime() - date1.getTime(); 

int minutes = (int) TimeUnit.MILLISECONDS.toMinutes(difference);

if(minutes<0)minutes += 1440; 

এখন মিনিট দুই সময়ের (মিনিটে) মধ্যে সঠিক সময়কাল হবে।


2
import java.text.SimpleDateFormat;
import java.util.Date;
public class Main {
public static void main(String[] args) throws Exception{
    String time1 = "12:00:00";
    String time2 = "12:01:00";
    SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss");
    Date date1 = format.parse(time1);
    Date date2 = format.parse(time2);
    long difference = date2.getTime() - date1.getTime();
    System.out.println(difference/1000);
}}

ব্যতিক্রম ছোঁয়া ব্যতিক্রম পার্সিং ব্যতিক্রমগুলি হ্যান্ডলগুলি


1

বিকল্প বিকল্প যদি বিভিন্ন দিন থেকে সময় নেওয়া হয়, উদাহরণস্বরূপ: 22:00 এবং 01:55।

public static long getDiffTime(Date date1, Date date2){
        if (date2.getTime() - date1.getTime() < 0) {// if for example date1 = 22:00, date2 = 01:55.
            Calendar c = Calendar.getInstance();
            c.setTime(date2);
            c.add(Calendar.DATE, 1);
            date2 = c.getTime();
        } //else for example date1 = 01:55, date2 = 03:55.
        long ms = date2.getTime() - date1.getTime();

        //235 minutes ~ 4 hours for (22:00 -- 01:55).
        //120 minutes ~ 2 hours for (01:55 -- 03:55).
        return TimeUnit.MINUTES.convert(ms, TimeUnit.MILLISECONDS);
    }

1
public class timeDifference {

public static void main(String[] args) {

    try {

        Date startTime = Calendar.getInstance().getTime();
        Thread.sleep(10000);
        Date endTime = Calendar.getInstance().getTime();

        long difference = endTime.getTime() - startTime.getTime();

        long differenceSeconds = difference / 1000 % 60;
        long differenceMinutes = difference / (60 * 1000) % 60;
        long differenceHours = difference / (60 * 60 * 1000) % 24;
        long differenceDays = difference / (24 * 60 * 60 * 1000);

        System.out.println(differenceDays + " days, ");
        System.out.println(differenceHours + " hours, ");
        System.out.println(differenceMinutes + " minutes, ");
        System.out.println(differenceSeconds + " seconds.");

    } catch (Exception e) {
        e.printStackTrace();
    }
}

}


1

এটা চেষ্টা কর:

public String timeDifference8(String startTime, String endTime) {
    LocalTime initialTime = LocalTime.parse(startTime);
    LocalTime finalTime =LocalTime.parse(endTime);
    StringJoiner joiner = new StringJoiner(":");
    long hours = initialTime.until( finalTime, ChronoUnit.HOURS);
    initialTime = initialTime.plusHours( hours );
    long minutes = initialTime.until(finalTime, ChronoUnit.MINUTES);
    initialTime = initialTime.plusMinutes( minutes );
    long seconds = initialTime.until( finalTime, ChronoUnit.SECONDS);
    joiner.add(String.valueOf(hours));
    joiner.add(String.valueOf(minutes));
    joiner.add(String.valueOf(seconds));
    return joiner.toString();
}

1
import java.sql.*;

class Time3 {

    public static void main(String args[]){ 
        String time1 = "01:03:23";
        String time2 = "02:32:00";
        long difference ;
        Time t1 = Time.valueOf(time1);
        Time t2 = Time.valueOf(time2);
        if(t2.getTime() >= t1.getTime()){
            difference = t2.getTime() - t1.getTime() -19800000;
        }
        else{
            difference = t1.getTime() - t2.getTime() -19800000;
        }

        java.sql.Time time = new java.sql.Time(difference); 
        System.out.println(time);
    } 

} 

1

আমি এই আরও ক্লিনার পেয়েছি।

       Date start = new Date();
        //Waiting for 10 seconds
        Thread.sleep(10000);
        Date end = new Date();
        long diff = end.getTime() - start.getTime();
        String TimeTaken = String.format("[%s] hours : [%s] mins : [%s] secs",
                Long.toString(TimeUnit.MILLISECONDS.toHours(diff)), 
                TimeUnit.MILLISECONDS.toMinutes(diff),
                TimeUnit.MILLISECONDS.toSeconds(diff));
        System.out.println(String.format("Time taken %s", TimeTaken));

আউটপুট : সময় নেওয়া [0] ঘন্টা: [0] মিনিট: [10] সেকেন্ড


0
    /*
 * Total time calculation.
 */
private void getTotalHours() {
    try {
        // TODO Auto-generated method stub
        if (tfTimeIn.getValue() != null && tfTimeOut.getValue() != null) {
            Long min1 = tfTimeOut.getMinutesValue();
            Long min2 = tfTimeIn.getMinutesValue();
            Long hr1 = tfTimeOut.getHoursValue();
            Long hr2 = tfTimeIn.getHoursValue();
            Long hrsTotal = new Long("0");
            Long minTotal = new Long("0");
            if ((hr2 - hr1) == 1) {
                hrsTotal = (long) 1;
                if (min1 != 0 && min2 == 0) {
                    minTotal = (long) 60 - min1;
                } else if (min1 == 0 && min2 != 0) {
                    minTotal = min2;
                } else if (min1 != 0 && min2 != 0) {
                    minTotal = min2;
                    Long minOne = (long) 60 - min1;
                    Long minTwo = min2;
                    minTotal = minOne + minTwo;
                }
                if (minTotal >= 60) {
                    hrsTotal++;
                    minTotal = minTotal % 60;
                }
            } else if ((hr2 - hr1) > 0) {
                hrsTotal = (hr2 - hr1);
                if (min1 != 0 && min2 == 0) {
                    minTotal = (long) 60 - min1;
                } else if (min1 == 0 && min2 != 0) {
                    minTotal = min2;
                } else if (min1 != 0 && min2 != 0) {
                    minTotal = min2;
                    Long minOne = (long) 60 - min1;
                    Long minTwo = min2;
                    minTotal = minOne + minTwo;
                }
                if (minTotal >= 60) {
                    minTotal = minTotal % 60;
                }
            } else if ((hr2 - hr1) == 0) {
                if (min1 != 0 || min2 != 0) {
                    if (min2 > min1) {
                        hrsTotal = (long) 0;
                        minTotal = min2 - min1;
                    } else {
                        Notification.show("Enter A Valid Time");
                        tfTotalTime.setValue("00.00");
                    }
                }
            } else {
                Notification.show("Enter A Valid Time");
                tfTotalTime.setValue("00.00");
            }
            String hrsTotalString = hrsTotal.toString();
            String minTotalString = minTotal.toString();
            if (hrsTotalString.trim().length() == 1) {
                hrsTotalString = "0" + hrsTotalString;
            }
            if (minTotalString.trim().length() == 1) {
                minTotalString = "0" + minTotalString;
            }
            tfTotalTime.setValue(hrsTotalString + ":" + minTotalString);
        } else {
            tfTotalTime.setValue("00.00");
        }
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}

4
এই কোডটি প্রশ্নের উত্তর দিতে পারে, কেন এবং / অথবা এই কোডটির প্রশ্নের উত্তর কীভাবে তার দীর্ঘমেয়াদী মানকে উন্নত করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করে ।
বেনিয়ামিন ডব্লিউ।

0

ক্লাস টাইমক্যালকুলেটর {স্ট্রিং আপডেটটাইম;

     public TimeCalculator(String time)
      {
        // time should be in 24 hours format like 15/06/2016 17:39:20  
        this.updateTime = time;
      }

     public String getTimeDifference()
     {
        String td=null;
       // get Current Time
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
        Date currentDate = new Date();
        Calendar calendar = new GregorianCalendar();
        calendar.setTime(currentDate);

        int c_year = calendar.get(Calendar.YEAR);
        int c_month = calendar.get(Calendar.MONTH) + 1;
        int c_day = calendar.get(Calendar.DAY_OF_MONTH);

        // get Editing Time

        Date edit_date = sdf.parse(updateTime);
        Calendar edit_calendar = new GregorianCalendar();
        edit_calendar.setTime(edit_date);

        int e_year = edit_calendar.get(Calendar.YEAR);
        int e_month = edit_calendar.get(Calendar.MONTH) + 1;
        int e_day = edit_calendar.get(Calendar.DAY_OF_MONTH);


        if(e_year==c_year&&e_month==c_month&&e_day==c_day)
            {

             int c_hours = calendar.get(Calendar.HOUR_OF_DAY);
             int c_minutes = calendar.get(Calendar.MINUTE);
             int c_seconds = calendar.get(Calendar.SECOND);

             int e_hours = edit_calendar.get(Calendar.HOUR_OF_DAY);
             int e_minutes = edit_calendar.get(Calendar.MINUTE);
             int e_seconds = edit_calendar.get(Calendar.SECOND);

      if(c_hours==e_hours&&c_minutes==e_minutes&&c_seconds==e_seconds)
         {
           td = "just now";
           return td;
          }
      else if(c_hours==e_hours&&c_minutes==e_minutes)
       {
         int d_seconds = c_seconds-e_seconds;
         td = String.valueOf(d_seconds);
         td = td+" seconds ago";
         return td;
       }
      else if(c_hours==e_hours&&c_minutes!=e_minutes)
       {
         int d_minutes = c_minutes-e_minutes;
         int d_seconds;
         if(c_seconds>e_seconds)
           {
             d_seconds = c_seconds-e_seconds;
           }else{
             d_seconds = e_seconds-c_seconds;
       }
          td = "00:"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago";
        return td;
  }
    else
       {
        int d_minutes,d_seconds,d_hours;
        d_hours=c_hours-e_hours;
        if(c_minutes>e_minutes)
       {
         d_minutes = c_minutes-e_minutes;
       }else{
         d_minutes = e_minutes-c_minutes;
       }
        if(c_seconds>e_seconds)
          {
            d_seconds = c_seconds-e_seconds;
          }else{
            d_seconds = e_seconds-c_seconds;
          }

      td = String.valueOf(d_hours)+":"+String.valueOf(d_minutes)+":"+String.valueOf(d_seconds)+" ago";
     return td;
  }
}
 else if(e_year==c_year&&e_month==c_month&&c_day==e_day+1){
   td = "yesterday";
   return td;
 }
 else{
    td = updateTime;
    return td;
     }
}}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.