Att logga datum

Diskussion i 'Frågor, support och diskussion' startad av sandos, 1 nov 2009.

  1. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Någon som märkt att konvertera datum till strängar är oerhört segt i android? Verkar ta typ 200-1000ms eller något liknande för mig. Kan det verkligen stämma?
     
  2. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Inte direkt tänkt på att det är segt faktikst, brukar dock försöka använda Time.
     
  3. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Ååh, kände inte alls till den! Kan nog vara vääldigt användbart. Jag märkte att även i debugger är date/calendar segt, att klicka på ett sådant värde tog runt 1 sekund att visa värdet.
     
  4. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Hade varit intressant att veta om Time är snabbare, det står ju så i java docen iaf. Har du möjlighet att mäta? Det finns ju även lite andra date utils i det paketet annars.
     
  5. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Jag ska göra lite prestandatest ikväll hoppas jag.
     
  6. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Det är specifikt toString i Date som segar ner allt för mig. Det tar runt 1500 ms per anrop! Android har sin egen DateFormat som man kan köra som tar obefintligt med tid istället. Jag orkar inte micro-benchmarka saker mellan Date och Time (de skiljer sig väsentligt, Time har bara en bråkdel av alla features av Date och Calendar) men jag kommer nog gå över till Time istället då jag inte har behov av millisekund-precision, plus att before() i Calendar inte vill fungera för mig.
     
  7. johannilsson

    johannilsson Adult Droid Medlem

    Blev medlem:
    23 jun 2009
    Inlägg:
    577
    Mottagna gillanden:
    8

    MINA ENHETER

    Har aldrig riktigt gillat att hålla på med datum och tid i Java, men när jag väl hittade Time i androids utils så blev jag mycket gladare :)

    Bra att du skrev en post på det så att man blir lite mer uppmärksam på de här bitarna framöver.
     
  8. Kaj

    Kaj Senior Droid Medlem

    Blev medlem:
    12 jun 2009
    Inlägg:
    1 768
    Mottagna gillanden:
    44

    MINA ENHETER

    Kommer inte ihåg vart jag läste om Time, men jag har för mig att det var i några prestandatips från Google. Iof är inte min loggning så viktig, men i Snowstorm finns en loggvy. Ett entry i skapas genom att jag skapar en Report, och sedan fyller i den när jag passerar olika steg i exekveringen. Reportklassen ser ut så här, och verkar funka bra:

    package se.f1nally.snowstorm;

    import java.util.Date;

    import android.text.format.Time;

    public class Report {

    private StringBuilder builder = new StringBuilder();
    private Time time = new Time();

    public Report() {
    builder.append("Report started at " + new Date()).append("\n");
    }

    public void append(String entry) {
    time.setToNow();
    builder.append(time.format("%T")).append(": ").append(entry).append("\n");
    }

    public String get() {
    return builder.toString();
    }

    }

    I slutet av "exekveringskedjan" gör jag report.get() och skriver den till min databas.

    Edit: Hur postar man formatterad kod?
    Edit2: Såg nu att jag kan ändra konstruktorn till att också använda Time.
     
    Last edited: 2 nov 2009
  9. sandos

    sandos Adult Droid Medlem

    Blev medlem:
    27 maj 2009
    Inlägg:
    715
    Mottagna gillanden:
    8

    MINA ENHETER

    Hittade denna bug iaf: http://code.google.com/p/android/issues/detail?id=3147

    Men de verkar ju påstå att det bara sker första gången den används? Vilket inte stämmer för mig. Jag ser "Loaded time zone names for en_US in xxxxms" hela tiden i logcat, och tiderna är mellan 1000 och 2000ms.

    Jaha, man måste återanvända SimpleDateFormat för att det ska gå fort. Det kan man ju iofs göra..