zerteilen eines Zeitstempels

Status
Nicht offen für weitere Antworten.

PollerJava

Top Contributor
Hallo nochmal,

Ich habe eine Zeitstempel und aus diesem Zeitstempel (Timestamp) benötige ich die einzelnen Komponenten für:

Code:
Second sec = new Second(dateTime.getSecond(), dateTime.getMinute(), dateTime.getHour(), dateTime.getDay(), dateTime.getMonth(), dateTime.getYear());


Daher habe ich mir eine Klasse geschrieben, die das macht. Meine Frage wäre jetzt, obs zur zZerteilung da noch was schnelleres gibt, da das Zerteilen sehr oft stattfindet:




Code:
 public void setDateTime(String sDateTime)
        {
        try
            {
            String[] dateTime = sDateTime.split(" ");
            String[] dateYearMonthDay = dateTime[0].split("-");
            year = Integer.parseInt( dateYearMonthDay[0] );
            month = Integer.parseInt( dateYearMonthDay[1] );
            day = Integer.parseInt( dateYearMonthDay[2] );

            String[] timeHourMinSec = dateTime[1].split( ":" );
            hour = Integer.parseInt( timeHourMinSec[0] );
            minute = Integer.parseInt( timeHourMinSec[1] );

            String[] secMillisec = timeHourMinSec[2].split(".");   
            second = Integer.parseInt(timeHourMinSec[2].substring(0, timeHourMinSec[2].indexOf(".")));

            String milliSeconds = sDateTime.substring( sDateTime.indexOf( "." ) + 1);
            milliSec = Integer.parseInt( milliSeconds ); 
            }
        catch (Exception ex)
            {
            System.out.println("Fehler in der Klasse DateTime: " + ex);
            }

...


getter und setter- Methoden
 
du könntest SimpleDateFormat das parsen übernehmen lassen, das arbeitet vielleicht optimiert,

wenn du selber ackerst und lieber schnelles als sauberen Code willst (was bei deinem auch fraglich ist):
arbeite mit chartAt() und wandle chars direkt in Zahlen um:

Code:
int day = (string.charAt(4)-'0')*10+(string.charAt(5)-'0');

// 14 = 1 * 10 + 4

mit entsprechenden Hilfsoperationen könntest du am Ende den Code
Code:
int day = appendDigits(string,4,5); 
// liest 4. und 5. Zeichen aus, wandelt sie in ints um und fügt sie zusammen wie oben

int month = appendDigits(string,7,8);
haben
 
nicht nur theoretisch sondern auch praktisch,
split + substring sind langsam und Integer.parseInt ist auch langsam


Code:
public class Test
{
    static String st = "3 7";
    static int k = 1000000;

    public static void main(String[] args)
        throws Exception
    {

        System.out.println("parse1: " + parse1());
        System.out.println("parse2: " + parse2());


        testParse1();
        testParse2();
        testParse1();
        testParse2();
    }

    public static void testParse1()
    {
        long time = System.currentTimeMillis();
        for (int i = 0; i < k; i++)
        {
            parse1();
        }
        System.out.println("Time parse1: " + (System.currentTimeMillis() - time));
    }

    public static void testParse2()
    {
        long time = System.currentTimeMillis();
        for (int i = 0; i < k; i++)
        {
            parse2();
        }
        System.out.println("Time parse2: " + (System.currentTimeMillis() - time));
    }


    public static int parse1()
    {
        try
        {
            String[] sts = st.split(" ");
            int a = Integer.parseInt(sts[0]);
            int b = Integer.parseInt(sts[1]);
            return a * b;
        }
        catch (Exception ex)
        {
            System.out.println("Fehler: " + ex);
        }
        return 0;
    }

    public static int parse2()
    {
        int a = st.charAt(0) - '0';
        int b = st.charAt(2) - '0';
        return a * b;
    }

}

->

parse1: 21
parse2: 21
Time parse1: 2062
Time parse2: 16
Time parse1: 1922
Time parse2: 16
 
wau .... das ist ja ein Faktor 125 um den es schneller geht....... hätte nicht gedacht, dass es doch soooo viel ausmacht. Wobei wohl dies auch noch anwächst wenn der String länger wird !?! den man Auseindernimmt.

Die geschichte funktioniert aber auch nur, wenn ich den Index habe auf den zugreife also wenn ich ganz genau was wo meine Daten sind, die ich haben will.....

gibt es für einen unbekannten String denn eine effektivere Methode ?
 
zumindest wäre es sehr effektiv, bei vielen Strings im gleichen Format diese Indexe zu bestimmen,
notfalls auch manuell vom Benutzer,

ein Automatismus ist begrenzt,
Leerzeichen usw. lassen sich natürlich ausfiltern,

aber bei 05:06:2007 weiß auch kein Mensch, ob der 5. Juni oder der 6. Mai gemeint ist
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben