Errae Skrevet 19. august 2008 Del Skrevet 19. august 2008 Hei! Er det noen som kan hjelpe meg å lage et java program som konverterer datoer? Jeg har en liste(.txt) med mange datoer. En på hver linje, i formatet 2001-01-01, og jeg ønsker å forandre dette til 01.01.2001 Er det noen som kan ordne dette for meg? Tusen takk! Lenke til kommentar
Thorsen Skrevet 19. august 2008 Del Skrevet 19. august 2008 Vel du leser fra filen. Leser inn strenger (String) Enklest dersom du bare bruker bindestreker i dato kan du bruke replace operatoren på stringene. f.eks (str er deklaret som en String) str=str.replace("-","."); Merk dette vil bytte ut alle bindestreker med punktum. Lenke til kommentar
Errae Skrevet 19. august 2008 Forfatter Del Skrevet 19. august 2008 Den kommandoen har jeg klar, men formatet skal byttes også fra åååå.mm.dd til dd.mm.åååå Lenke til kommentar
drool Skrevet 19. august 2008 Del Skrevet 19. august 2008 (endret) Den kommandoen har jeg klar, men formatet skal byttes også fra åååå.mm.dd til dd.mm.åååå Du kan se litt på SimpleDateFormat Endret 19. august 2008 av drool Lenke til kommentar
Thorsen Skrevet 19. august 2008 Del Skrevet 19. august 2008 (endret) Den kommandoen har jeg klar, men formatet skal byttes også fra åååå.mm.dd til dd.mm.åååå Har datoene alltid samme plassering i Stringene ? Da kan du jo eventuelt bruke substring nystr = str.substring(8,9) +str.substring(4,7)+ str.substring(0,3) (antar at str = åååå.mm.dd) og da skal nystr bli dd.mm.åååå om jeg ikke har gjort noe feil. Hvis du trenger noe mer robust bør du nok se på regex. Ta et søk på google, mulig du kan bruke noe av følgende: http://www.devarticles.com/c/a/Java/Regular-Expressions/5/ Endret 19. august 2008 av Thorsen Lenke til kommentar
pgdx Skrevet 19. august 2008 Del Skrevet 19. august 2008 (endret) import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.Calendar; import java.util.GregorianCalendar; import java.util.IllegalFormatWidthException; import java.util.List; public class ErreaConverter { private final String FILENAME; private List<Calendar> dates; private List<String> strings; public ErreaConverter(String filename) { this.FILENAME = filename; parseFile(); } private void parseFile() { dates = new ArrayList<Calendar>(); try { FileReader fr = new FileReader(FILENAME); BufferedReader br = new BufferedReader(fr); String tmp = null; while ((tmp = br.readLine()) != null) { String[] date = tmp.trim().split("-"); if (date.length != 3) { throw new IllegalFormatWidthException(date.length); } int year = Integer.parseInt(date[0]); int month = Integer.parseInt(date[1]) - 1; int day = Integer.parseInt(date[2]); dates.add(new GregorianCalendar(year, month, day)); } br.close(); fr.close(); } catch (NumberFormatException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void printDates() { for (String s : getDatesAsStrings()) { System.out.println(s); } } public List<String> getDatesAsStrings() { if (strings == null) { strings = new ArrayList<String>(dates.size()); for (Calendar c : getDates()) { strings.add(String.format("%02d.%02d.%02d", c .get(Calendar.DATE), (c.get(Calendar.MONTH) + 1), c .get(Calendar.YEAR))); } } return strings; } public List<Calendar> getDates() { return dates; } public static void main(String[] args) { new ErreaConverter("dates.txt").printDates(); } } Endret 19. august 2008 av pgdx Lenke til kommentar
steingrim Skrevet 19. august 2008 Del Skrevet 19. august 2008 (endret) Hvorfor bruke så mange linjer Java når det holder med én linje hvis man har et skikkelig operativsystem og en kommandolinje $ awk 'BEGIN { FS="-" }; { print $3"."$2"."$1 }' < datoer.txt 01.01.2001 02.02.2002 03.03.2003 22.03.2003 edit: kode Endret 19. august 2008 av steingrim Lenke til kommentar
pgdx Skrevet 19. august 2008 Del Skrevet 19. august 2008 Sant nok, nå laget jo jeg et rammeverk hvor man kunne gjøre litt mer med datoene enn bare å flytte tallene frem og tilbake, men strengt tatt kan man gjøre det på færre linjer, som noe ala dette: public void printFile(String filename) throws Exception { FileReader fr = new FileReader(filename); BufferedReader br = new BufferedReader(fr); String tmp = ""; while ((tmp = br.readLine()) != null) { System.out.println(tmp.split("-")[2] + "." + tmp.split("-")[1] + "." + tmp.split("-")[0]); } Lenke til kommentar
steingrim Skrevet 19. august 2008 Del Skrevet 19. august 2008 Jepp, jeg så det, men awk løste akkurat et problem jeg hadde på en elegant måte mens jeg leste denne tråden, så da ble jeg fristet til å bruke awk litt til Lenke til kommentar
drool Skrevet 19. august 2008 Del Skrevet 19. august 2008 Ved bruk av SimpleDateFormat kan man gjøre det på følgende måte: import java.text.SimpleDateFormat; import java.util.Date; public class DatoTest { private SimpleDateFormat output = new SimpleDateFormat("dd.MM.yyyy"); private SimpleDateFormat input = new SimpleDateFormat("yyyy-mm-dd"); private String preDato = "2001-01-01"; private void formaterDato()throws Exception{ System.out.println("preDato: " + preDato); Date inputAsDate = input.parse(preDato); System.out.println("PostDate: " + output.format(inputAsDate)); } public static void main(String[] args) throws Exception{ new DatoTest().formaterDato(); } } Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå