So erhalten Sie den vorherigen Tag mit datetime
Ich wollen eine DateTime-Eigenschaft vorherigen Tag bei 00:00:00. Ich weiß nicht, warum DateTime.AddDays(-1) nicht funktioniert. Oder warum DateTime.AddTicks(-1) nicht funktioniert.
Zunächst soll das funktionieren?
Ich habe 2 Objekte. Jedes Objekt müssen die Datumzeit-Felder ValidFrom, ValidTo.
EDIT: Nach Hause kommen von der Arbeit habe ich versucht, das gleiche Verhalten wie meine business-Objekte Verhalten. Unten sind die Codes die ich habe versucht, zu replizieren, wie es aussieht bei der Arbeit. Das ist natürlich zu Hause arbeiten, aber nicht bei der Arbeit. Die gute Sache ist, ich bekam gute Antworten und +1 auf alle! =)
public class RuleValue
{
public DateTime ValidFrom, ValidTo;
public RuleValue(DateTime _validFrom, DateTime _validTo)
{
ValidFrom = _validFrom;
ValidTo = _validTo;
}
//oldObject.ValidFrom = 1900-01-01
//oldObject.ValidTo = 9999-12-31
//newObject.ValidFrom = 2010-03-22
//newObject.ValidTo = 9999-12-31
public void ChangeOldDate(RuleValue oldObject, RuleValue newObject)
{
/*
* 1: When first object (oldObject) have ValidTo set to SQL-server maxdate (9999-12-12 23:59:59 etc)
* I want to allow for a new object to be created
* 2: oldObject timespan ValidFrom-ValidTo should not be overlapping with newObjects timespan(i have checks for that)
* 3: oldObject.ValidTo should be newObject.ValidFrom - one day/or one tick
*/
if (oldObject.ValidTo == DateTime.MaxValue)
{
oldObject.ValidTo = newObject.ValidFrom.AddTicks(-1); //now works
}
}
}
class Program
{
static void Main(string[] args)
{
RuleValue rv1 = new RuleValue(DateTime.Parse("1900-01-01"), DateTime.MaxValue);
RuleValue rv2 = new RuleValue(DateTime.Parse("2010-03-22"), DateTime.MaxValue);
Console.WriteLine("First: ");
Console.WriteLine("Old = " + rv1.ValidFrom + " - " + rv1.ValidTo);
Console.WriteLine("New = " + rv2.ValidFrom + " - " + rv2.ValidTo);
rv1.ChangeOldDate(rv1, rv2);
Console.WriteLine("After: ");
Console.WriteLine("Old = " + rv1.ValidFrom + " - " + rv1.ValidTo);
Console.WriteLine("New = " + rv2.ValidFrom + " - " + rv2.ValidTo);
Console.ReadKey();
}
}
//Output:
//First:
//Old = 1900-01-01 00:00:00 - 9999-12-31 23:59:59
//New = 2010-03-22 00:00:00 - 9999-12-31 23:59:59
//After:
//Old = 1900-01-01 00:00:00 - 2010-03-21 23:59:59
//New = 2010-03-22 00:00:00 - 9999-12-31 23:59:59
// ALL CORRECT! :D
Kommentar zu dem Problem - Öffnen
können wir den code sehen für DataTime.AddDays(-1) ?
Editiert oben...
AddDays()
scheint zu sein, Microsoft-spezifische, weil die Dokumentation ist in MSDN. Möglicherweise ein IronPython-spezifische Funktion? Es ist definitiv kein standard-Python datetime
, da es nicht in docs.python.org/3/library/datetime.html InformationsquelleAutor der Frage Niike2 | 2010-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
DateTime ist eine unveränderliche Struktur. Wenn Sie anrufen,
AddDays()
oderAddTicks()
es gibt eine neue Instanz der DateTime -, es ändert NICHT die Instanz, die Sie rief es auf. Stellen Sie sicher Sie weisen das Ergebnis einer Variablen zu, oder es gibt keine sichtbare änderung im code:Wenn Sie brauchen, um die Zeit zurückzusetzen, Teil des Datums um Mitternacht, müssen Sie einen expliziten Konstruktor-Aufruf:
InformationsquelleAutor der Antwort LBushkin
der einfachste Weg ist es..
nun, wenn Sie versuchen, eine variable zu verwenden, die bereits erstellt wurde, würden Sie dies tun...
Möglicherweise buchen Sie Ihr code wird uns zeigen, was Sie falsch machen.
InformationsquelleAutor der Antwort Ryan Alford
Vielleicht ist Ihr problem ist
AddDays
ändert nicht das Objekt, es gibt ein DateTime-mit den geänderten Tagen. So sollte es sein:InformationsquelleAutor der Antwort Keltex
Versuchen:
Dies wird abzustreifen die Zeit und geben Sie bis Mitternacht des vorhergehenden Tages.
BEARBEITEN:
Ja sorry, ich soll eine Art Hinweis darauf, dass "DateTime" bedeutete, dass die variable in Frage. Ich fügte hinzu, Klammern um ihn herum.
InformationsquelleAutor der Antwort JYelton
Haben Sie versucht das:
InformationsquelleAutor der Antwort Enrico Campidoglio
//Lat-Tag Des Aktuellen Monats
InformationsquelleAutor der Antwort Hossein