Time difference between two times

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP



Time difference between two times



I want to display the difference between two times in hh:mm format.



The first time is from a database and the second time is the system time. Time difference is updated every second.



How can I do that?



Currently I'm using two manual time if this works perfectly then I implement it into my apps.


public class MainActivity extends Activity

TextView mytext;
@Override
protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Timer updateTimer = new Timer();
updateTimer.schedule(new TimerTask()

public void run()

try

TextView txtCurrentTime= (TextView)findViewById(R.id.mytext);
SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss aa");
Date date1 = format.parse("08:00:12 pm");
Date date2 = format.parse("05:30:12 pm");
long mills = date1.getTime() - date2.getTime();
Log.v("Data1", ""+date1.getTime());
Log.v("Data2", ""+date2.getTime());
int hours = (int) (mills/(1000 * 60 * 60));
int mins = (int) (mills % (1000*60*60));

String diff = hours + ":" + mins; // updated value every1 second
txtCurrentTime.setText(diff);

catch (Exception e)

e.printStackTrace();



, 0, 1000);






Are the one from the database a String or Date instance?
– JustDanyul
Mar 12 '13 at 11:39






What is the magnitude of the difference (seconds, milliseconds, days...)?
– assylias
Mar 12 '13 at 11:39





Have you tried something already?
– Egor
Mar 12 '13 at 11:40





@assylias i need in hh:mm format for example 11:05 am - 12:30 pm = 01:25
– Niks
Mar 12 '13 at 11:48





@JustDanyul String instance
– Niks
Mar 12 '13 at 11:49




7 Answers
7



To Calculate the difference between two dates you could try something like:


long mills = date1.getTime() - date2.getTime();
int hours = millis/(1000 * 60 * 60);
int mins = (mills/(1000*60)) % 60;

String diff = hours + ":" + mins;



To update the Time Difference every second you can make use of Timer.


Timer updateTimer = new Timer();
updateTimer.schedule(new TimerTask()
public void run()
try
long mills = date1.getTime() - date2.getTime();
int hours = millis/(1000 * 60 * 60);
int mins = (mills/(1000*60)) % 60;

String diff = hours + ":" + mins; // updated value every1 second
catch (Exception e)
e.printStackTrace();



, 0, 1000); // here 1000 means 1000 mills i.e. 1 second



Edit : Working Code :


public class MainActivity extends Activity {

private TextView txtCurrentTime;

@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
txtCurrentTime= (TextView)findViewById(R.id.mytext);
Timer updateTimer = new Timer();
updateTimer.schedule(new TimerTask()

public void run()

try


SimpleDateFormat format = new SimpleDateFormat("hh:mm:ss aa");
Date date1 = format.parse("08:00:12 pm");
Date date2 = format.parse("05:30:12 pm");
long mills = date1.getTime() - date2.getTime();
Log.v("Data1", ""+date1.getTime());
Log.v("Data2", ""+date2.getTime());
int hours = (int) (mills/(1000 * 60 * 60));
int mins = (int) (mills/(1000*60)) % 60;

String diff = hours + ":" + mins; // updated value every1 second
txtCurrentTime.setText(diff);

catch (Exception e)

e.printStackTrace();



, 0, 1000);





how can i updated difference every second.... ?
– Niks
Mar 12 '13 at 12:02





here run method will execute every second, so whatever you want to update or calculate you can write inside it..
– Sanober Malik
Mar 12 '13 at 12:09





its not working :(
– Niks
Mar 12 '13 at 12:18





Can you please paste your code? What is the error?
– Sanober Malik
Mar 12 '13 at 12:29





plz check my code and help me
– Niks
Mar 12 '13 at 12:43



finally did it yuppiiieee ...


package com.timedynamicllyupdate;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity

TextView current;
private TextView txtCurrentTime;
@Override
protected void onCreate(Bundle savedInstanceState)

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Thread myThread = null;
Runnable myRunnableThread = new CountDownRunner();
myThread= new Thread(myRunnableThread);
myThread.start();

current= (TextView)findViewById(R.id.current);



public void doWork()

runOnUiThread(new Runnable()

public void run()

try

SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss aa");

txtCurrentTime= (TextView)findViewById(R.id.mytext);

Date systemDate = Calendar.getInstance().getTime();
String myDate = sdf.format(systemDate);
// txtCurrentTime.setText(myDate);

Date Date1 = sdf.parse(myDate);
Date Date2 = sdf.parse("02:50:00 pm");

long millse = Date1.getTime() - Date2.getTime();
long mills = Math.abs(millse);

int Hours = (int) (mills/(1000 * 60 * 60));
int Mins = (int) (mills/(1000*60)) % 60;
long Secs = (int) (mills / 1000) % 60;

String diff = Hours + ":" + Mins + ":" + Secs; // updated value every1 second
current.setText(diff);

catch (Exception e)




);


class CountDownRunner implements Runnable

// @Override
public void run()

while(!Thread.currentThread().isInterrupted())

try

doWork();
Thread.sleep(1000); // Pause of 1 Second

catch (InterruptedException e)

Thread.currentThread().interrupt();

catch(Exception e)






@Override
public boolean onCreateOptionsMenu(Menu menu)

// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;





Using java.time



The modern way is with the java.time classes that supplant the troublesome old date-time classes.



The LocalTime class represents a time-of-day without a date and without a time zone.


LocalTime



Define a formatting pattern with DateTimeFormatter class.


DateTimeFormatter


String inputStart = "08:00:12 pm".toUpperCase() ;
String inputStop = "05:30:12 pm".toUpperCase() ;

DateTimeFormatter f = DateTimeFormatter.ofPattern( "hh:mm:ss a" );
LocalTime start = LocalTime.parse( inputStart , f );
LocalTime stop = LocalTime.parse( inputStop , f );



start.toString(): 20:00:12



stop.toString(): 17:30:12



The LocalTime class works within a single generic 24-hour day. So it does not consider crossing midnight. If you want to cross over between days you should be using ZonedDateTime, OffsetDateTime, or LocalDateTime instead, all date-time objects rather than time-of-day-only.


LocalTime


ZonedDateTime


OffsetDateTime


LocalDateTime



A Duration captures a span of time unattached to the timeline.


Duration


Duration d = Duration.between( start , stop );



Calling toString generates text in the standard ISO 8601 format for durations: PnYnMnDTnHnMnS where the P marks the beginning and the T separates the years-months-days from the hours-minutes-seconds. I strongly recommend using this format rather than "HH:MM:SS" format that is ambiguous with clock-time.


toString


PnYnMnDTnHnMnS


P


T



If you insist on using the ambiguous clock-time format, in Java 9 and later you can build that string by calling toHoursPart, toMinutesPart, and toSecondsPart.


toHoursPart


toMinutesPart


toSecondsPart



In your example data we are moving backwards in time, going from 8 PM to 5 PM, so the result is a negative number of hours and minutes, a negative two and a half hours.



d.toString(): PT-2H-30M



See this code run live at IdeOne.com.



About java.time



The java.time framework is built into Java 8 and later. These classes supplant the troublesome old legacy date-time classes such as java.util.Date, Calendar, & SimpleDateFormat.


java.util.Date


Calendar


SimpleDateFormat



The Joda-Time project, now in maintenance mode, advises migration to the java.time classes.



To learn more, see the Oracle Tutorial. And search Stack Overflow for many examples and explanations. Specification is JSR 310.



Where to obtain the java.time classes?



The ThreeTen-Extra project extends java.time with additional classes. This project is a proving ground for possible future additions to java.time. You may find some useful classes here such as Interval, YearWeek, YearQuarter, and more.


Interval


YearWeek


YearQuarter



The process is roughly as follows,



Convert your string instance to a date instance the following way


SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2011-01-03");



Assuming the systemTime you have is a long, representing miliseconds since the epoc, you can now do the following


long difference = longNow - date.getTime();
int msPerHour = 1000*60*60;
int hours = difference/secondPerHour;
int minutes = difference % secondPerHour;



where longNow is your current variable containing system time.


longNow





finally I got it, what I really want to do thanks to every one for your suggestion, code, example and help frndzzzz...
– Niks
Mar 13 '13 at 9:36



OK I Build here Funcion for you:


public void omriFunction()
Date Start = null;
Date End = null;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
try
Start = simpleDateFormat.parse(04+":"+30);
End = simpleDateFormat.parse(06+":"+45);
catch(ParseException e)
//Some thing if its not working


long difference = End.getTime() - Start.getTime();
int days = (int) (difference / (1000*60*60*24));
int hours = (int) ((difference - (1000*60*60*24*days)) / (1000*60*60));
int min = (int) (difference - (1000*60*60*24*days) - (1000*60*60*hours)) / (1000*60);
if(hours < 0)
hours+=24;
if(min < 0)
float newone = (float)min/60 ;
min +=60;
hours =(int) (hours +newone);
String c = hours+":"+min;
Log.d("ANSWER",c);



ANSWER :2:15; in the logcat



Hi Guys not sure what I was doing wrong , but this helped for me , hope I can help someone else out.



My min were being calculated in some float format so I used this formula


long Min = time % (1000*60*60)/(60*1000);
time is my date2.getTime() - date1.getTime();



Happy coding


Date currentTime = parseDate("11:27:20 AM");
Date endTime = parseDate("10:30:01 AM");

if (endTime.before(currentTime))

Log.e("Time :","===> is before from current time");


if (endTime.after(currentTime))

Log.e("Time :","===> is after from current time");




private Date parseDate(String date)

String inputFormat = "hh:mm:ss aa";
SimpleDateFormat inputParser = new SimpleDateFormat(inputFormat, Locale.US);
try
return inputParser.parse(date);
catch (java.text.ParseException e)
return new Date(0);







By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Popular posts from this blog

Firebase Auth - with Email and Password - Check user already registered

Dynamically update html content plain JS

How to determine optimal route across keyboard