webForumDet fria alternativet

Tids konvertering/formatering

9 svar · 374 visningar · startad av Viktor

ViktorMedlem sedan aug. 20021 710 inlägg
#1

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
#2

Hm... återkommer...

neox83Medlem sedan okt. 2000153 inlägg
#3

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
#4

: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
#5

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
#6

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
#7

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
#8

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
#9

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
#10

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

Genererad på 386 ms · cache AV · v20260730165559-full.f96bc7eb