Här kan du säkert hitta vad du vill.
http://weblog.stevex.org/radio/stories/2002/12/10/stringFormattingInC.html
- M
13 svar · 583 visningar · startad av andreas_lindh
Jag har ett datum jag hämtar från en databas.
Nu försöker jag skriva ut det i formatet
Torsdagen den 16 oktober 2003 .
jag har provat med
datetime.now.tostring("D")
men då skrivs bara
den 16 oktober 2003 ut.
Hur ska jag göra för att skriva ut dagen också?
Här kan du säkert hitta vad du vill.
http://weblog.stevex.org/radio/stories/2002/12/10/stringFormattingInC.html
- M
Tack.
En tråkig lösning för att få namnet på dagen:
DateTime dteNow = new DateTime(DateTime.Now());
string strDay;
switch(dteNow.DayOfWeek)
{
case DateTime.Monday:
strDay = "Måndag";
break;
case DateTime.Tuesday:
strDay = "Tisdag";
break;
case DateTime.Wednesday:
strDay = "Onsdag";
break;
case DateTime.Thursday:
strDay = "Torsdag";
break;
case DateTime.Friday:
strDay = "Fredag";
break;
case DateTime.Saturday:
strDay = "Lördag";
break;
case DateTime.Sunday:
strDay = "Söndag";
break;
}
En mycket snyggare lösning:
DateTime dteNow = new DateTime(DateTime.Now());
string[] astrDayOfWeek = new string[7] {"Måndag", "Tisdag", "Onsdag", "Torsdag", "Fredag", "Lördag", "Söndag"};
string strDay = astrDayOfWeek[dteNow.DayOfWeek - 1];
Och givetvis en stevex.org-lösning (tro vilken som är mest användbar ;))
string strDate = string.Format({0:dddd den dd MMMM yyyy}, DateTime.Now());
Först gjorde som ditt första exempel.
Sen gjorde jag en annan funktion för att skriva ut datumet
Public Function datum(ByVal _datum As String)
Dim _d As DateTime = CDate(_datum)
Return _d.ToString("dddd") & "en " & _d.ToString("D")
End Function
andreas!
Din kod är betydligt långsammare än Engine's lösning. Anledningen till detta är att när man lägger ihop 2 strängar så skapas en ny sträng och när du sedan lägger ihop den nya strängen med ytterligare 1 så skappas ytterligare 1 ny sträng.
Det betyder att din kod skapar 2 nya strängar för att skicka tillbaka datumet. Medans Enigens exempel skapas en ny sträng (MS har fixat så att ToString() inte är prestanda krävande, kommer inte ihåg exakt, men det skall inte ta så mycket prestanda).
Alltså ur prestanda synpunkt är ditt förslag sämre :(. Att lägga ihop strängar med & (VB.NET) och + (C#) är prestanda dödande och om man skall lägga ihop en massa strängar så använder man stringbuilder klassen.
- M
Ok. Tack för tipset.
gjorde om funktionen
Public Function datum(ByVal _datum As String)
Dim _d As DateTime = CDate(_datum)
Dim _s As String = Format(_d, "dddden den dd MMMM yyyy")
Return _s
End Function
Nu skrivs söndagen 21en 21 oktober 2001 ut.
Hur ska jag göra för att skriva ut söndagen den 21 oktober 2001 ?
Kan du inte skippa "en" efter namnet på dagen?
D.v.s. köra det här:
Public Function datum(ByVal _datum As String)
Dim _d As DateTime = CDate(_datum)
Dim _s As String = Format(_d, "dddd den dd MMMM yyyy")
Return _s
End Function
Det är inget problem med "en" efter dagen. Problemet är d i den.
Den tror att den ska skriva ut datumet
Fungerar det om du escape:ar d:et då?
Dim _s As String = Format(_d, "dddd \den dd MMMM yyyy")
Nu blev jag osäkert på om det fungerar så, men det går ju alltid att testa ;)
Tack :)
Det fungerade med \den
Här får du en funktion som fungerar.
public string datum(DateTime myDateTime){
System.Text.StringBuilder oSB = new System.Text.StringBuilder();
oSB.Append(myDateTime.ToString("dddd"));
oSB.Append("en den ");
oSB.Append(myDateTime.ToString("dd MMMM yyyy"));
return oSB.ToString();
}
- M
StringBuilder är en mycket trevlig klass (och det ska vara bättre att använda den istället för string om jag har förstått det hela).