public string SnyggtDatum(date datumet)
{
return datumet.ToLongDateString();
}
Fungerar inte det? (lite onödigt att göra det till en funktion iofs...) :)
11 svar · 861 visningar · startad av thevice
Hejsan!
Jag har länge försökt klura ut hur jag ska kunna göra om en kod för datum som jag har i ASP till .NET C#. Eftersom DateDiff inte fungerar med C# så blir det problem för min lilla hjärna att komma på en lösning. Kanske ni kan hjälpa till?
Koden skriver fixar till datumet så det t.ex blir 15:e Apr 23:37:
Function SnyggtDatum(datumet)
text = datumet
text = replace(text," ","|")
text = replace(text,"-","|")
text = replace(text,":","|")
datum = split(text,"|")
dag = datum(2)
Manad = datum(1)
Minut = datum(4)
Timme = datum(3)
dag = replace(dag, "0", "")
If dateDiff("d", datumet, now) = 0 Then
Dagen = "Idag"
snyggtDatum = ""& Dagen &" "& Timme &":"& minut &""
ElseIf dateDiff("d", datumet, now) = 1 Then
Dagen = "Igår"
snyggtDatum = ""& Dagen &" "& Timme &":"& minut &""
Else
If Dag < 3 Then
bojning = ":a"
Else
bojning = ":e"
End If
If manad = 1 Then
manad = "Jan"
ElseIf manad = 2 Then
manad = "Feb"
ElseIf manad = 3 Then
manad = "Mars"
ElseIf manad = 4 Then
manad = "Apr"
ElseIf manad = 5 Then
manad = "Maj"
ElseIf manad = 6 Then
manad = "Juni"
ElseIf manad = 7 Then
manad = "Juli"
ElseIf manad = 8 Then
manad = "Aug"
ElseIf manad = 9 Then
manad = "Sept"
ElseIf manad = 10 Then
manad = "Okt"
ElseIf manad = 11 Then
manad = "Nov"
ElseIf manad = 12 Then
manad = "Dec"
End If
snyggtDatum = ""& Dag &""& bojning &" "& manad &" "& Timme &":"& minut &""
End If
End Function
Det kanske är lite mycket kod. Men ni kanske vet någon artikel eller liknande som gör som gör samma sak?
Tack på förhand!
/ Timmie
public string SnyggtDatum(date datumet)
{
return datumet.ToLongDateString();
}
Fungerar inte det? (lite onödigt att göra det till en funktion iofs...) :)
ToLongDateString blir ju Wednesday, May 16, 2001.
Känns som om det är lite långt ifrån det som jag vill åstakomma. :)
Provat att kanske söka? :) http://www.google.se/search?hl=sv&q=c%23+"date+formatting"&btnG=Sök&meta=
thevice skrev:
ToLongDateString blir ju Wednesday, May 16, 2001.
Känns som om det är lite långt ifrån det som jag vill åstakomma. :)
Jomen det är bara att switcha till svenska. Sök på "System.Globalization" så får du svaret.
Däremot så får du skriva en specialare för att få fram "Idag" etc.
Nu kan jag inte alla parameter, men du kan skicka in pattern till din ToString().
DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
ger dig
2007-10-17 21:48:23
Du kan där leka runt med de olika formattyperna så i ditt fall så skulle det bli något sånt här:
DateTime.Now.ToString("dd:{0} XXXX HH:mm:ss", (DateTime.Now.Day < 3 "a" : "e"))
Nu har jag inte provat det, men teoretiskt borde det fungera om du bara kommer på vad du skall skriva istället för XXXX för att få fram dagensmånad. Men svaret finns på MSDN om du letar efter DateTime.
- M
Var visst inte så himla svårt som jag trodde:
void FixDate(string Date)
{
DateTime DateLabel = DateTime.Parse(Date);
DateTime DateToday = DateTime.Today;
string FixedDate;
if (DateLabel.Date == DateToday)
{
FixedDate = "Idag " + DateLabel.ToString("HH:mm");
}
else if (DateLabel.Date == DateTime.Now.Date.AddDays(-1.0))
{
FixedDate = "Igår " + DateLabel.ToString("HH:mm");
}
else
{
if (DateLabel.Date.Day < 3)
{
FixedDate = DateLabel.Date.Day + ":a";
}
else
{
FixedDate = DateLabel.Date.Day + ":e";
}
FixedDate += " " + DateLabel.Date.ToString("MMM") + " " + DateLabel.ToString("HH:mm");
}
datumLabel.Text = FixedDate.ToString();
}
Du kan lösa det med lite mindre kod, dock blir den lite mer svårläslig.
string ConvertIntoFormatedString(DateTime tempDate)
{
if (DateTime.Now.Date.AddDays(-1) <= tempDate.Date)
return string.Format("{0} {1}",(DateTime.Now.Date == tempDate.Date ? "Idag" : "Igår"), tempDate.ToString("HH:mm"));
else
return tempDate.ToString(string.Format("dd:{0} MMM HH:mm", (DateTime.Now.Day < 3 ? "a" : "e")));
}
Denna koden är kortare, men gör samma sak, den är dock lite mer komplex. Men det finns 2 viktiga saker med denna kod som du inte har i din.
Det första är att jag sätter ingen control i koden, utan jag krymper uppgiften i koden till att bara omvandla datumet till en tid, vilket för att du kan återanvända din kod även i applikationer där du inte har datumLabel kontrollen med. Man skall alltid försöka att sätta värden på kontroller så nära frontend som möjligt. Med min kod kan du flytta bak själva konvertering av tiden till en egen assembly, typ Helper.Time och alla möjliga funktioner du vill göra med en tid, lägger du där i, så som att hitta första veckadagen i en månda, kanske hitta den 4 sista dagen i månaden, hitta "businessdagar" osv osv...
Den andra förändringen som jag gör är att jag tar emot ett datetime objekt istället för en sträng. Det gör jag för att göra koden i funktionen mer robust. Som det är i ditt exempel så kan man skicka in en sträng och få funktionen att krascha i runtime, miljö. Men min funktion kan du inte krascha på samma sätt, eftersom du måste skicka in en datetime.
I ditt fall så har dessa 2 åtgärder säkert ingen som helst betydelse, men om du skulle bygga större projekt, där du bygger små komponenter som andra utvecklare skall kunna använda sig av, så har det faktiskt riktigt stor påverkan, på hur robust din kod kommer att uppfattas av andra, dessutom så ser det ju bättre ut för dig om koden kraschar i någon annans komponent för att man matat in datumet fel än i din komponent för att du inte kontrollerar så att datumet är i ett korrekt format innan du omvandlar strängen till ett datum.
- M
Wow!! Så trevligt det är med bra förklaringar och människor som verkligen tar sig tid!
Stor kompispuff på dig Gladh, bra jobbat!! :bire
Jag kan inte mer än att tacka dig tyvärr Gladh. Det är sådanna här beskrivningar som gör att man lär sg nya saker och inte bara håller på med samma stuk hela tiden.
Tack så mycket!
Ovidkommande kanske, men tänk på att Svenska Akademin rekommenderar att man använder särskrivningen i dag samt i går.
Inte ovidkommande, bara lite OT. ;)