Vores Meeho!™ Blog giver dig generelle nyheder, tekniske tips, inspiration og mere til i relation til Meeho!™-platformen.

Tilmeld dig gratis nu!

Indlæg fra 3-2010

» Tidszonekonvertering med java.util.Date

Skrevet af Anders Østergaard Jensen d. 9/3 2010 kl. 06:50

Når man bygger internationale websider er det ofte nødvendigt at vise dato og tid konverteret til brugerens lokale tidszone. Ruby on Rails har indbygget understøttelse for det, mens Java altså kræver en manuel tilgang. I det følgende vil jeg vise, hvordan man nemt og bekvemt kan implementere  tidszonekonvertering i Java.

Den følgende metode foretager en tidszonekonvertering fra en standard java.util.Date (som standard er den justeret til maskinens egen tidszone) til en specifik tidszone:

public static String formatDanishDate(Date d, String tz) {
DateFormat fmt = new SimpleDateFormat(”d/MM/yyyy ‘kl.’ HH:mm Z”);
TimeZone zone = getTimeZone(tz);
fmt.setTimeZone(zone);
return fmt.format(d);
}
public static String formatUSDate(Date d, String tz) {
DateFormat fmt = new SimpleDateFormat(”EEE, d/MM/yyyy ‘at’ KK:mm a Z”);
TimeZone zone = getTimeZone(tz);
logger.error(”+++ Chosen tz was: ” + zone.getDisplayName());
fmt.setTimeZone(zone);
logger.error(”LOL FORMAT: ” + fmt.format(d));
return fmt.format(d);
}
public static String formatUSDate(Date d, String tz) {

    DateFormat fmt = new SimpleDateFormat("EEE, d/MM/yyyy 'at' KK:mm a Z");

    TimeZone zone = getTimeZone(tz);

    fmt.setTimeZone(zone);

    return fmt.format(d);

  }

Ovenstående metode er afhængig af følgende supportfunktion, som søger igennem Java-bibliotekets understøttede tidszoner (lower case-søgning). Hvis der ikke findes et resultat, returneres værdien af getDefault() blot. Ifølge Javadoc for SDK’et afhænger default-tidszonen af maskinens locale-indstillinger (hvis din maskine er indstillet til at være i København, vil default-tidszonen herefter være Europe/Copenhagen).

  public static TimeZone getTimeZone(String tz) {

    TimeZone retVal;

    for (String id: TimeZone.getAvailableIDs()) {

      if (id.toLowerCase().contains(tz.toLowerCase())) {

        retVal = TimeZone.getTimeZone(id);

        return retVal;

      }

    }

    return TimeZone.getDefault();

  }

Søgning med lowercase er særligt anvendeligt, hvis du bruger tidszoner på tværs af flere applikationer og rammeværk med den samme database. F.eks. gemmer Ruby on Rails kun den valgte tidzone med det sidste ID efter skråstregen (dvs. ‘Copenhagen’ i stedet for det mere sigende ‘Europe/Copenhagen’), hvilket gør det umuligt at implementere en en-til-en-konvertering mellem de to miljøer. Et kald til getTimeZone(”Sydney”) eller getTimeZone(”Copenhagen”) vil altså returnere Java-tidszonen “Australia/Sydney” hhv. “Europe/Copenhagen”.

Endelig muliggør klassen SimpleDateFormat visning af den nu konverterede dato-repræsentation i et lokaliseret format. Den enkelte bruger kan derfor nu også vælge, hvordan dato og tid skal repræsenteres i din applikation. Dette Javadoc-link beskriver de forskellige formatteringsmuligheder. For eksempel kan en mulig dansk repræsentation af datoen se således ud:

DateFormat fmt = new SimpleDateFormat("d/MM/yyyy 'kl.' HH:mm Z");

Fortæl os endelig, hvis du kender til andre, mere effektive metoder til at gennemføre tidszonekonvertering af dato- og tidsstempler i Java.

» Om at løse problemet med USB-nøgler, som virker på Windows 7 og ikke Mac OS X og vice versa

Skrevet af Kasper Tidemann d. 8/3 2010 kl. 07:42

Hvis du kører både Mac OS X og Windows 7, så er du muligvis stødt ind i problemet med at dine USB-nøgler enten virker på Mac OS X eller Windows 7, men ikke dem begge to.

Følg nedenstående trin for at løse problemet:

Trin 1) Partitionér USB-nøglen vha. Diskværktøj i Mac OS X. Lav en enkelt partition med enhedsformatet “ledig plads”, og partitionsskemaet “Master Boot Record”.

Trin 2) Indsæt USB-nøglen i Windows 7-maskinen. Nu vil Windows 7 fortælle dig at USB-nøglen skal formateres. Den besked skal du ignorere, og herefter gå ind under Kontrolpanel -> System og sikkerhed -> Opret og formater harddiskpartitioner (under Administration). Nu åbner vinduet Diskhåndtering.

Trin 3) Du burde kunne se USB-nøglen her, og muligvis er teksten streget ud. Højreklik på USB-nøglens bjælke og vælg “Ny simpel diskenhed…”. Her vælger du at anvende hele disken, vælg FAT32, vælg standard allokeringsstørrelse og endelig et passende navn til USB-nøglen.

Tilbage er blot at udføre selve formateringen. Når den er klaret, så burde USB-nøglen virke fint både på Mac OS X og Windows 7.

» Tak skal I have!

Skrevet af Kasper Tidemann d. 8/3 2010 kl. 03:22

Det er virkelig fedt at få positiv feedback fra brugerne af Meeho!™, når vi nu har arbejdet så hårdt på det. Her er et eksempel fra Facebook:

Screenshot af Facebook.

Screenshot af Facebook.

Tak skal du have, Kenneth, og et stort tak skal lyde til de mange brugere, som vi kommunikerer med dagligt. Tak for jeres opbakning, jeres gode idéer og input, og jeres entusiasme omkring Meeho!™. Det sætter vi virkelig pris på!

» RubyGems: uninitialized constant Gem::GemRunner (NameError)

Skrevet af Kasper Tidemann d. 6/3 2010 kl. 23:13

Efter at have opdateret RubyGems, så får du muligvis følgende fejlbesked:

uninitialized constant Gem::GemRunner (NameError)

Hvis du oplever ovenstående fejl når du forsøger at bruge gem, så skal du først og fremmest finde ud af hvilken gem, du gør brug af. Åbn en terminal og skriv følgende:

which gem

Kommandoen vil fortælle dig hvilken gem du bruger, samt stien til den. Det vil typisk være /usr/bin/gem eller /usr/local/bin/gem.

Derefter skal du åbne selve gem-filen i en teksteditor. Hvis du bruger TextMate til Mac OS X, så kan du gøre det direkte fra din terminal vha. kommandoen mate /usr/bin/gem (husk at du muligvis skal ændre stien, så du peger på den rigtige gem).

Når filen er åbnet, så kan du se linjen require ‘rubygems’. Lige under den linje skal du tilføje linjen require ‘rubygems/gem_runner’, hvorefter du gemmer filen. Forsøg så at bruge gem igen – det skulle meget gerne virke nu. Ændringen, som du skal lave i gem, er vist her:

Her kan du se gem, som er åbnet i TextMate. Det er linje 10, som udgør rettelsen.

Her kan du se gem, som er åbnet i TextMate. Det er linje 10, som udgør rettelsen.