webForumDet fria alternativet

Skriva ut datum

.NET

13 svar · 583 visningar · startad av andreas_lindh

Medlem sedan jan. 20011 140 inlägg
Frågan#1

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å?

Medlem sedan maj 20012 812 inlägg
#2

Här kan du säkert hitta vad du vill.

http://weblog.stevex.org/radio/stories/2002/12/10/stringFormattingInC.html

- M

Medlem sedan jan. 20011 140 inlägg
#3

Tack.

Medlem sedan dec. 20003 887 inlägg
#4

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());
Medlem sedan jan. 20011 140 inlägg
#5

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
Medlem sedan maj 20012 812 inlägg
#6

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

Medlem sedan jan. 20011 140 inlägg
#7

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 ?

Medlem sedan juli 20022 537 inlägg
#8

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
Medlem sedan jan. 20011 140 inlägg
#9

Det är inget problem med "en" efter dagen. Problemet är d i den.
Den tror att den ska skriva ut datumet

Medlem sedan dec. 20003 887 inlägg
#10

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 ;)

Medlem sedan jan. 20011 140 inlägg
#11

Tack :)
Det fungerade med \den

Medlem sedan maj 20012 812 inlägg
#12

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

Medlem sedan dec. 20003 887 inlägg
#13

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).

Medlem sedan jan. 20011 140 inlägg
#14

Tack Gladh :)

Använder din funktion istället.
Är den mycket bättre än den sista jag skrev?

262 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)