Avatar billede nat Nybegynder
28. september 2005 - 15:55 Der er 13 kommentarer og
1 løsning

c# stringbuilder erstatte et datoformat med et andet

Hej Eksperter,

Jeg har en stringbuilder, der skriver en tekstfil fra en DB.

Når denne er skrevet, vil jeg gerne konvertere datoen som har dette format dd-mm-yyyy hh:mm:ss til at have dette format yyyyMMddHHmmSS i stedet.

Kan jeg bruge replace, og i såfald hvad jeg skal jeg skrive?

Jeg forestiller mig noget i stil med:
(sb er StringBuilderen)

sb.Replace("dd-MM-yyyy HH:MM:SS", "yyyyMMddmmss");
Avatar billede arne_v Ekspert
28. september 2005 - 16:00 #1
du har ikke mulighed for at hente fra DB som DateTime og bare udskrive den i det format
du ønsker ?
Avatar billede arne_v Ekspert
28. september 2005 - 16:03 #2
ellers

s2 = DateTime.ParseExact(s1, "dd-MM-yyyy HH:mm:ss zzz yyyy", new CultureInfo("en-US", false), DateTimeStyles.AllowWhiteSpaces).ToString("yyyyMMddHHmmss");
Avatar billede nat Nybegynder
29. september 2005 - 09:30 #3
Hvad er s2 og s1?
Avatar billede arne_v Ekspert
29. september 2005 - 09:32 #4
s1 = forkert streng
s2 = rigtig streng
Avatar billede nat Nybegynder
29. september 2005 - 09:33 #5
Okay, men hvordan får jeg angivet at s1 er forkert og s2 rigtig
Avatar billede arne_v Ekspert
29. september 2005 - 09:37 #6
du står med en streng i det forkerte format og den sætter du ind i stedetfor s1
og du får så returneret en ny stremg i det rigtige format
Avatar billede nat Nybegynder
29. september 2005 - 09:45 #7
øhhh, okay kan jeg så skrive s1 som "dd-MM-yyyy HH:MM:SS" og s2 som "yyyyMMddmmss" - jeg kan ikke skrive den eksakte dato da der flere tusinde rækker der bliver skrevet ud fra db'en
Avatar billede arne_v Ekspert
29. september 2005 - 10:36 #8
prøv noget a la:

SqlCommand sel = new SqlCommand("SELECT id,tid FROM tabel", con1);
SqlDataReader rdr = sel.ExecuteQuery();
while(rdr.Read())
{
  int id = (int)rdr[0];
  string tid = (string)rdr[1];
  tid = DateTime.ParseExact(tid, "dd-MM-yyyy HH:mm:ss zzz yyyy", new CultureInfo("en-US", false),  DateTimeStyles.AllowWhiteSpaces).ToString("yyyyMMddHHmmss");
  SqlCommand upd = new SqlCommand("UPDATE tabel SET tid = '" + tid + "' WHERE id = " + id, con2);
  upd.ExecuteNonQuery();
}
Avatar billede nat Nybegynder
29. september 2005 - 11:46 #9
Måske, men jeg tror ikke lige det er det jeg vil, da der bliver skrevet en masse kolonner ud og ikke kun datoer.

Min kode ser sådan ud:

adapter = new SqlDataAdapter("select * from stat", myConnection);
DataTable dt = new DataTable();
myConnection.Open();
adapter.Fill(dt);
myConnection.Close();

StringBuilder sb = new StringBuilder();
foreach (DataRow dr in dt.Rows)
{
    foreach (DataColumn dc in dt.Columns)
{
bool needtoquote = !IsNumber(dr[dc].ToString()) && !IsDate(dr[dc].ToString());
if(needtoquote)
{
    sb.Append("\"");
}
sb.Append(dr[dc]);
if(needtoquote)
{
sb.Append("\"");
}
sb.Append(";");
}
sb.Remove(sb.Length-1, 1);
sb.Append("\n");
}
//Fjerne "tvunget" linjeskift
sb.Replace("<br>"," ");

Kan jeg ikke her på en eller anden måde replace det udskrevne datoformat med det nye?
Avatar billede nat Nybegynder
29. september 2005 - 12:03 #10
Der mangler lige efter sb.replace... :

string filename=@"TEST.txt";
FileStream fs = File.Create(filename);
StreamWriter dinFil = new StreamWriter(fs, System.Text.Encoding.Default);
dinFil.Write(sb.ToString());
dinFil.Close();
Avatar billede arne_v Ekspert
29. september 2005 - 12:27 #11
er det ikke bare

sb.Append(dr[dc]);

som skal være

sb.Append(DateTime.ParseExact(dr[dc].ToString(), "dd-MM-yyyy HH:mm:ss zzz yyyy", new CultureInfo("en-US", false),  DateTimeStyles.AllowWhiteSpaces).ToString("yyyyMMddHHmmss"));
Avatar billede nat Nybegynder
29. september 2005 - 12:34 #12
Men jeg vil jo stadigvæk også kunne skrive almindelige tekststrenge ind i filen som ikke er datoer....

Kan man ikke lave et tjek på det, inden man enten skriver teksten eller datoen?
Avatar billede nat Nybegynder
29. september 2005 - 12:47 #13
Fik løst det, jeg lavede følgende ekstra:
bool date = IsDate(dr[dc].ToString());
if(date)
                        {
                            //Test med datoformat til FK
                            sb.Append(DateTime.ParseExact(dr[dc].ToString(), "dd-MM-yyyy HH:mm:ss", new CultureInfo("en-US", false),  DateTimeStyles.AllowWhiteSpaces).ToString("yyyyMMddHHmmss"));
                        }
                        else
                        {
                            sb.Append(dr[dc]);
                        }

Det gør vist tricket.

Smider du ikke et svar - og tak for hjælpen
Avatar billede arne_v Ekspert
29. september 2005 - 12:53 #14
svar

PS: til det brug var DataReader vel bedre end DataAdapter ??
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester