ViktorMedlem sedan aug. 20021 710 inlägg
Hej
Jag undrar om det finns någon inbyggd klass som kan konvertera en text sträng till en tid.
Om jag har denna stäng, 1:15.455 (1 minut, 15 sekunder och 455 tusendelar) så konverterar funktionen detta till tusendelar av en sekund (millisekunder, samma som används i Timestamp).
/Viktor
phonkworksMedlem sedan juli 2001228 inlägg
neox83Medlem sedan okt. 2000153 inlägg
Har gjort en liten klass för detta ändamål:
import java.util.StringTokenizer;
public class TimeConvert{
private static final int MILLISEKUNDER_I_EN_SEKUND = 1000;
private static final int SEKUNDER_I_EN_MINUT = 60;
private static final String UPPDELARE = ".:;,";
public static long konvertera(String tiden){
StringTokenizer token = new StringTokenizer(tiden, UPPDELARE);
int minuter = Integer.parseInt(token.nextToken());
int sekunder = Integer.parseInt(token.nextToken());
int milliSekunder = Integer.parseInt(token.nextToken());
long totalMilliSekunder = milliSekunder + (sekunder * MILLISEKUNDER_I_EN_SEKUND)
+ (minuter*SEKUNDER_I_EN_MINUT*MILLISEKUNDER_I_EN_SEKUND);
return totalMilliSekunder;
}
}
Den kan anrops via TimeConvert.konvertera(strängen med tiden. Den returnerar antalet millisekunder som long.
Du kan använda ".:,;" som delare mellan minut,sekund och millisekunder.
ViktorMedlem sedan aug. 20021 710 inlägg
:bire
Den var inte dålig, mycket bättre än den som jag använder idag (några for lopar :)). Tack!
/Viktor
ViktorMedlem sedan aug. 20021 710 inlägg
En liten följdfråga,
Hur gör man tvärtom? När jag hämtar tiden i millisekunder från databasen och vill visa den i rätt format (1:16.233)? Någon som har något bra förslag? Eller är det loopar som gäller?
/Viktor
neox83Medlem sedan okt. 2000153 inlägg
Man lägger till en metod konvertera med signaturen long istället.
import java.util.StringTokenizer;
public class TimeConvert{
private static final int MILLISEKUNDER_I_EN_SEKUND = 1000;
private static final int SEKUNDER_I_EN_MINUT = 60;
private static final String UPPDELARE = ".:;,";
public static long konvertera(String tiden){
StringTokenizer token = new StringTokenizer(tiden, UPPDELARE);
int minuter = Integer.parseInt(token.nextToken());
int sekunder = Integer.parseInt(token.nextToken());
int milliSekunder = Integer.parseInt(token.nextToken());
long totalMilliSekunder = milliSekunder + (sekunder * MILLISEKUNDER_I_EN_SEKUND)
+ (minuter*SEKUNDER_I_EN_MINUT*MILLISEKUNDER_I_EN_SEKUND);
return totalMilliSekunder;
}
public static String konvertera(long milliSekunder){
long minuter = milliSekunder / (MILLISEKUNDER_I_EN_SEKUND*SEKUNDER_I_EN_MINUT);
long sekunder = ((milliSekunder - (minuter*SEKUNDER_I_EN_MINUT*MILLISEKUNDER_I_EN_SEKUND))
/ MILLISEKUNDER_I_EN_SEKUND);
long milliSek = (milliSekunder - ((minuter*SEKUNDER_I_EN_MINUT*MILLISEKUNDER_I_EN_SEKUND)
+ (sekunder*MILLISEKUNDER_I_EN_SEKUND)));
String output = minuter + "." +sekunder + ":" + milliSek;
return output;
}
}
LimeMedlem sedan sep. 2001837 inlägg
http://java.sun.com/j2se/1.4/docs/api/javax/swing/text/DateFormatter.html
och
http://java.sun.com/j2se/1.4/docs/api/java/text/DateFormat.html
(DateFormat.parse("1:16.233"))
eller kanske bara Calendar.getInstance().toString()
Varför göra det krångligare än det är när det finns klasser som hanterar datum och tid i Java redan?
ViktorMedlem sedan aug. 20021 710 inlägg
Jag får tyvärr bara "Unparseable date: 1:19.999" när jag försöker använda DateFormat för att konvertera en tid (m:s.milli).
DateFormat vill väll ha en tid (ett klockslag) och ett datum, inte en tidtagnings tid.
/Viktor
LimeMedlem sedan sep. 2001837 inlägg
Hehe... du tror inte att jag vet det... ;-)
Varför ge hela lösningen...
Om man använder SHORT så är det bara ett klockslag. Felet ligger nog i att du behöver konvertera . till :
Å andra sidan så funkar ju neox class.
/Lime
ViktorMedlem sedan aug. 20021 710 inlägg
Jag tror jag fortsätter med den. Det som är bra med den är att det inte behöver vara ett exakt format, man kan skilja på tecknen med .,:;, kan vara bra när det är "data amatörer" som ska knappa in tiden :)
/Viktor