Vraag TimeSpan to DateTime-conversie


Ik wil een Timespan converteren naar Datetime. Hoe kan ik dit doen?

Ik heb een methode gevonden op Google:

DateTime dt;
TimeSpan ts="XXX";

//We can covnert 'ts' to 'dt' like this:

dt= Convert.ToDateTime(ts.ToString());

Is er een andere manier om dit te doen?


53
2018-04-23 07:10


oorsprong


antwoorden:


Het is niet erg logisch om TimeSpan om te zetten in DateTime. Probeer te begrijpen wat leppie hierboven heeft gezegd. TimeSpan is een duur van bijvoorbeeld 6 dagen 5 uur en 40 minuten. Het is geen datum. Als ik 6 dagen zeg; Kun je er een datum uit afleiden? Het antwoord is NEE tenzij u een REFERENTIE-datum heeft.

Dus als u TimeSpan naar DateTime wilt converteren, hebt u een peildatum nodig. 6 dagen en 5 uur vanaf wanneer? Dus je kunt zoiets als dit schrijven:

 DateTime dt = new DateTime(2012, 01, 01);
 TimeSpan ts = new TimeSpan(1, 0, 0, 0, 0);
 dt = dt + ts;

81
2018-04-23 07:17



Hoewel het geselecteerde antwoord volkomen correct is, geloof ik dat ik begrijp wat het OP hier probeert te bereiken, aangezien ik een soortgelijk probleem had.

Ik had een TimeSpan die ik wilde weergeven in een rasterbesturing (als alleen hh: mm), maar het raster leek TimeSpan niet te begrijpen, alleen DateTime. Het OP heeft een soortgelijk scenario waarbij alleen de TimeSpan het relevante deel is, maar de noodzaak niet overwoog om het DateTime-referentiepunt toe te voegen.

Dus, zoals hierboven aangegeven, heb ik eenvoudig DateTime.MinValue toegevoegd (hoewel elke datum zal doen) die vervolgens door het raster wordt genegeerd wanneer het de tijdsperiode als een tijdsdeel van de resulterende datum rendert.


29
2018-03-06 02:05



U hebt een referentiedatum nodig om dit nuttig te laten zijn.

Een voorbeeld uit      http://msdn.microsoft.com/en-us/library/system.datetime.add.aspx

// Calculate what day of the week is 36 days from this instant.  
System.DateTime today = System.DateTime.Now;  
System.TimeSpan duration = new System.TimeSpan(36, 0, 0, 0);  
System.DateTime answer = today.Add(duration);  
System.Console.WriteLine("{0:dddd}", answer);  

8
2018-04-23 07:26



TimeSpan kan worden toegevoegd aan een nieuwe DateTime om dit te bereiken.

TimeSpan ts="XXX";
DateTime dt = new DateTime() + ts;

Maar zoals eerder vermeld, is het niet strikt logisch zonder een geldige startdatum. Ik ben tegengekomen een use-case waarbij ik alleen het tijdsaspect nodig had. werkt prima, zolang de logica correct is.


7
2017-10-23 11:58



Als u alleen de tijdwaarde in een datagrid of label vergelijkbaar wilt weergeven, is de beste manier om rechtstreeks tijd in datetime datatype te converteren.

SELECTEER CONVERT (datetime, myTimeField) als myTimeField FROM Table1


0
2018-04-24 14:48



var StartTime = new DateTime(item.StartTime.Ticks);

0
2017-11-13 05:27



Je zou ook DateTime.FromFileTime (finishTime) kunnen gebruiken waarbij finishTme lang is en de tijd aangeeft. Of FromFileTimeUtc.


0
2017-07-24 04:57



Een gemakkelijke methode, gebruik teken:

new DateTime((DateTime.Now - DateTime.Now.AddHours(-1.55)).Ticks).ToString("HH:mm:ss:fff")

Deze functie geeft u een datum (zonder dag / maand / jaar)


-3
2018-02-04 21:16



Een probleem met al het bovenstaande is dat de conversie het onjuiste aantal dagen retourneert zoals opgegeven in de TimeSpan.
Met behulp van het bovenstaande retourneert het onderstaande 3 en niet 2.

Ideeën over hoe de 2 dagen te behouden in de TimeSpan-argumenten en ze terug te geven als de DateTime-dag?

public void should_return_totaldays()
{
    _ts = new TimeSpan(2, 1, 30, 10);
    var format = "dd";
    var returnedVal = _ts.ToString(format);
    Assert.That(returnedVal, Is.EqualTo("2")); //returns 3 not 2
}

-3
2018-06-09 18:01