webForumDet fria alternativet

Hjälp med att göra om från ASP till .NET C#

.NET

11 svar · 861 visningar · startad av thevice

Medlem sedan dec. 2005198 inlägg
Frågan#1

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

Medlem sedan juli 2004206 inlägg
#2
public string SnyggtDatum(date datumet)
{
return datumet.ToLongDateString();
}

Fungerar inte det? (lite onödigt att göra det till en funktion iofs...) :)

Medlem sedan dec. 2005198 inlägg
#3

ToLongDateString blir ju Wednesday, May 16, 2001.
Känns som om det är lite långt ifrån det som jag vill åstakomma. :)

Medlem sedan juni 20008 205 inlägg
Medlem sedan juli 2004206 inlägg
#5

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.

Medlem sedan maj 20012 812 inlägg
#6

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

Medlem sedan dec. 2005198 inlägg
#7

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();
		}
Medlem sedan maj 20012 812 inlägg
#8

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

Medlem sedan dec. 20014 239 inlägg
#9

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

Medlem sedan dec. 2005198 inlägg
#10

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!

Medlem sedan juni 20019 024 inlägg
#11

Ovidkommande kanske, men tänk på att Svenska Akademin rekommenderar att man använder särskrivningen i dag samt i går.

Medlem sedan okt. 20041 556 inlägg
#12

Inte ovidkommande, bara lite OT. ;)

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