12 oktober, 2008

Programmering: Java program för restid mellan två datum

Nu är det första gången som jag publicerar ett Java-program här på bloggen. Innan har det bara varit lite Javascript men nu kommer det riktiga.

Det är ett litet program för att räkna ut en restid mellan två datum. Det var en uppgift i kursen Programmering på högskolan i Halmstad.

Tänk på att det inte går att räkna ut restider som överlappar i veckor. T.ex går det inte att räkna ut restiden mellan Sat 05:47 och Tue 14:15!

Den smarta uträkningen är att jag först omvandlar skillnaden mellan de två tiderna till sekunder. När man sedan har antalet sekunder kan man formatera och beräkna resultatet nästan hur man vill för att få det snyggt. Jag kände att jag ville dela med mig av detta.


//***************************************
// TravelTime.java
// Name: Waschman
// Hemsida: http://waschman.blogspot.com
// Licens: OpenSource
//
// Beräkna tiden mellan två tidpunkter
//***************************************

import java.util.Scanner;

public class TravelTime
{

public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
String startTime, stopTime;
int dayA, dayB;
int minA, hourA, minB, hourB;

// Hämta tiderna från användaren
System.out.println("Trive time, please use Mon,Tue,Wen,Thu,Fri,Sat,Sun");
System.out.print("Enter start time (e.g. Mon 06:55): ");
startTime = scan.nextLine();
System.out.print("Enter stop time (e.g. Wen 08:55): ");
stopTime = scan.nextLine();

// Fixa fram specificerade data

// Hämta dagnr för vald textdag
dayA = getDayTextToInt( startTime.substring(0, 3) );
hourA = Integer.parseInt( startTime.substring(4, 6) );
minA =Integer.parseInt( startTime.substring(7, 9) );

dayB = getDayTextToInt( stopTime.substring(0, 3) );
hourB = Integer.parseInt( stopTime.substring(4, 6) );
minB = Integer.parseInt( stopTime.substring(7, 9) );

// Felkontroll
if (dayA == 0 || dayB == 0) {
System.out.println("Please enter data in correct format!");
}
else {
// Beräkna antalet sekunder som skiljer
int secDiff = ( (dayB*24)*3600 + hourB*3600 + minB*60 ) -
( (dayA*24)*3600 + hourA*3600 + minA*60 );

// Visa en snygg tid
int dd,hh,mm,rest;
dd = secDiff / 3600 / 24;// Räkna ut antalet dagar
hh = secDiff / 3600 - dd * 24;// Timmar
rest = secDiff % 3600;
mm = rest / 60;// Minuter

// Visa resultatet
System.out.println("The traveltime is "+ dd +" days, "+ hh +" hours and "+ mm +
" minutes between "+ startTime +" and "+ stopTime);
}
}


//--------------------------------------
// Convert a string representation of a
// day in the week to integer
// Return: int
//--------------------------------------
public static int getDayTextToInt(String day)
{
day = day.toUpperCase();
if (day.equals("MON")) {
return 1;
}
else if (day.equals("TUE")) {
return 2;
}
else if (day.equals("WEN")) {
return 3;
}
else if (day.equals("THU")) {
return 4;
}
else if (day.equals("FRI")) {
return 5;
}
else if (day.equals("SAT")) {
return 6;
}
else if (day.equals("SUN")) {
return 7;
}
else {
return 0;// Fel format
}
}

}

För att testa koden måste ni först kompilera den till en *.class fil.

Inga kommentarer:

Välkomna till bloggen

Välkomna ska ni vara kära besökare. Jag skriver om IT för att det är kul och för att jag vill dela med mig av information och kunskap. Jag försöker hålla bloggen så kategoriserad som möjligt för att ni enklare ska hitta intressanta länkar och artiklar.