Beräkna tid mellan två datum i Visual Basic. Svar yyyy-mm-dd

Permalänk
Medlem

Beräkna tid mellan två datum i Visual Basic. Svar yyyy-mm-dd

Jag vill ha hjälp med kod i VB att beräkna tiden mellan jag gick i pension 2011-07-01 och till nu.
Exempel på svar: Jag har varit pensionär i 8 år 3 månader och 11 dagar.

Permalänk
Medlem

Hmm, ja, om du tar dagens datum och subtraherar datumet 2011-07-01 från detta så får du ett timespan. Utifrån detta kan du därefter få t.ex. totalt antal dagar. Därefter bör det ju inte vara något större problem att heltalsdividera ner det till år, månader och de dagar som blir över.

dvs typ

Dim days as Integer = (Date.Now - #7/1/2011#).Days Console.WriteLine((days\365).ToString() + " år " + ((days Mod 365)\30).ToString() + " månader " + ((days Mod 365) Mod 30).ToString() + " dagar")

Visa signatur

The power of GNU compiles you!
"Often statistics are used as a drunken man uses lampposts -- for support rather than illumination."

Permalänk
Medlem

Följande bör göra det du vill

Det ger dig skillnaden mellan två datum som en DateTimeSpan. Från detta hämtar du bara ut antal år, månader och sedan dagar.

Dim dtStart As DateTime = Date.Now Dim dtEnd As new DateTime(2011, 7, 1) Dim dts As DateTimeSpan = DateTimeSpan.DateSpan(dtEnd, dtStart) Console.WriteLine("Jag har varit pensionär i {0} år {1} månader och {2} dagar", dts.Years.ToString, dts.Months.ToString, dts.Days.ToString)

Se följande länk på hur du får DateTimeSpan
https://stackoverflow.com/a/27904178/6019661

Visa signatur

NZXT H510 Flow MSI B450 Tomahawk MAX
AMD Ryzen 5800X3D RX 7900XTX Kingston Fury 64GB
LG C2 42" 4K@120Hz AOC Q27G2U 1440P@144Hz

Permalänk
Medlem
Permalänk
Medlem

@kode: Tack men koden följer inte kalendern vad jag kan se. Räknar inte med skottår

Permalänk
Avstängd

@Leni: Det finns metoder för det, men jag vet inte varför de inte räknar med det från början (eller om du har gjort fel någonstans). VB är ganska old-school nu så jag har inte så bra koll. Men du kan ju titta här: https://stackoverflow.com/questions/21733969/accounting-for-l...

Permalänk
Medlem

Jag vill påstå att så länge man använder sig av DateTime/TimeSpan-klasserna i .NET så ska differenser mellan datum följa kalendern. Jag har oerhört svårt att tänka mig att Visual Basic har egna, fristående implementationer som dessutom skiljer sig i logik.

Jag orkar inte engagera mig i Visual Basic, men C# fungerar i alla fall som det ska:

[TestClass] public class UnitTest1 { [TestMethod] public void TestMethod1() { // 2100 är inte skottår int year = 2100; DateTime last = new DateTime(year, 3, 1); DateTime first = new DateTime(year, 2, 28); TimeSpan diff = last - first; Assert.IsFalse(DateTime.IsLeapYear(year)); Assert.AreEqual(new TimeSpan(1, 0, 0, 0), diff); // 2019 är inte skottår year = 2019; last = new DateTime(year, 3, 1); first = new DateTime(year, 2, 28); diff = last - first; Assert.IsFalse(DateTime.IsLeapYear(year)); Assert.AreEqual(new TimeSpan(1, 0, 0, 0), diff); // 2020 är skottår year = 2020; last = new DateTime(year, 3, 1); first = new DateTime(year, 2, 28); diff = last - first; Assert.IsTrue(DateTime.IsLeapYear(year)); Assert.AreEqual(new TimeSpan(2, 0, 0, 0), diff); // 2000 är skottår year = 2000; last = new DateTime(year, 3, 1); first = new DateTime(year, 2, 28); diff = last - first; Assert.IsTrue(DateTime.IsLeapYear(year)); Assert.AreEqual(new TimeSpan(2, 0, 0, 0), diff); } }

Permalänk
Medlem

Nodatime är ett bra .NET-bibliotek för att hantera tid/datum

https://nodatime.org/

Visa signatur

| MSI B650 Tomahawk | Ryzen 7 9800X3D | ASUS RTX 3070 | 64GB DDR5 6000MHz | MSI MPG A1000G | Samsung 970 Evo M.2 1TB + 2x WD Black SN850X 2TB|