webForumDet fria alternativet

Slå ihop datum + tid på enklaste sätt!

.NET

3 svar · 684 visningar · startad av doggelito

Medlem sedan juni 20003 076 inlägg
Frågan#1

Ja, hur gör man det?
Jag har ett datum och sen har jag ett klockslag och vill slå ihop till ett DateTime objekt.
Jag kommer bara på sättet att skapa ett nytt DateTime objekt och lägga in år, månad, dag, timmar och minuter i konstruktorn men det känns lite väl bökigt?!

Finns det någon inbygd metod i Frameworket som tar emot ett datum som en parameter och ett klockslag, alt. timespan som en annan parameter?

Medlem sedan feb. 200563 inlägg
#2

doggelito skrev:

Ja, hur gör man det?
Jag har ett datum och sen har jag ett klockslag och vill slå ihop till ett DateTime objekt.
Jag kommer bara på sättet att skapa ett nytt DateTime objekt och lägga in år, månad, dag, timmar och minuter i konstruktorn men det känns lite väl bökigt?!

Finns det någon inbygd metod i Frameworket som tar emot ett datum som en parameter och ett klockslag, alt. timespan som en annan parameter?

Jag vet inte vad du menar med "har ett datum" och "har ett klockslag" dvs om du har dem som strängar eller som DateTime-instanser.
Om du har dem som två separata strängar så kan du skapa ett DateTime med en hjälpmetod på följande sätt:

        DateTime CreateDateTimeFromDateAndTimeParts(String date, String time)
        {
            return DateTime.ParseExact(
                date.Trim() + " " + time.Trim(), 
                "yyyy-MM-dd HH:mm:ss", 
                null
            );
        }

// Anrops-exempel:
using NUnit.Framework;
...
            Assert.AreEqual(
                new DateTime(2010, 12, 24, 3, 4, 5), 
                CreateDateTimeFromDateAndTimeParts("2010-12-24", "03:04:05")
            );

Om du i stället har datumet och tiden som DateTime-Instanser så kan du slå ihop dem med en hjälpmetod på följande sätt:

        DateTime CreateDateTimeFromDateAndTimeParts(DateTime dateTimeWithDatePart, DateTime dateTimeWithTimePart)
        {
            return dateTimeWithDatePart - dateTimeWithDatePart.TimeOfDay + dateTimeWithTimePart.TimeOfDay;
        }

// Anrops-exempel:
using NUnit.Framework;
...
            DateTime dateTimeWithTimePart = new DateTime(2000, 1, 1, 3, 4, 5);
            DateTime dateTimeWithDatePart = new DateTime(2010, 12, 24, 22, 20, 30);
            Assert.AreEqual(
                new DateTime(2010, 12, 24, 3, 4, 5), 
                CreateDateTimeFromDateAndTimeParts(dateTimeWithDatePart, dateTimeWithTimePart)
            );
Medlem sedan feb. 200563 inlägg
#3

Förresten angående frågeställningen "Finns det någon inbygd metod i Frameworket" så kan man (m.h.a. en s.k. "extension method") göra så att det åtminstone ser ut som att den inbyggda DateTime-klassen har en metod som tar en parameter som är ett annat DateTime-objekt vars tid skall användas för att returnera en ny tid. Kodexempel:

    public static class ExtensionMethods
    {
        public static DateTime CreateDateTimeAtTime(
            this DateTime dateTimeWithDatePart, 
            DateTime dateTimeWithTimePart
        ) {
            return dateTimeWithDatePart - dateTimeWithDatePart.TimeOfDay + dateTimeWithTimePart.TimeOfDay;
        }
    }

// Anrops-exempel:
using NUnit.Framework;
...
            DateTime dateTimeWithTimePart = new DateTime(2000, 1, 1, 3, 4, 5);
            DateTime dateTimeWithDatePart = new DateTime(2010, 12, 24, 22, 20, 30);
            Assert.AreEqual(
                new DateTime(2010, 12, 24, 3, 4, 5),
                dateTimeWithDatePart.CreateDateTimeAtTime(dateTimeWithTimePart)
            );
Medlem sedan juni 20003 076 inlägg
#4

Extensionmetoden ser intressant ut, ska testas. Tack Tomas! :bire

(för att svara på, i min luddiga förklaring, vad jag hade var ett DateTime objekt innehållande datum liknande DateTime.Now.Date samt att jag vill addera aktuellt klockslag, exempelvis som nu när jag skriver detta: 20:42, dvs. DateTime.Now.Hour + DateTime.Now.Minute)

252 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)