Gå til innhold

Konvertering av dato format


Anbefalte innlegg

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
Videoannonse
Annonse

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
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 av Thorsen
Lenke til kommentar
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 av pgdx
Lenke til kommentar

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 av steingrim
Lenke til kommentar

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

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...