DateTime.Now

  • VB.NET

Es gibt 39 Antworten in diesem Thema. Der letzte Beitrag () ist von RodFromGermany.

    DateTime.Now

    Servus,

    wie kann ich am besten die Zeit Multiplizieren?
    Timestamp kommt nicht in Frage, da das Programm auch neu gestartet werden soll und trotzdem die Zeit Differenz ausgerechnet werden soll.
    Oder einer sagt wie ich trotz Neustart die Differenz berechnen kann ^^


    VB.NET-Quellcode

    1. Label1.Text = CDate(System.DateTime.Now.ToString())
    2. '03.05.2017 16:58:28


    VB.NET-Quellcode

    1. Label2.Text = (CDate(System.DateTime.Now.ToString()) - CDate(Label1.Text)).ToString()
    2. '00:00:36 -> hh:mm:ss


    z.b.

    VB.NET-Quellcode

    1. Label2.Text = (CDate(System.DateTime.Now.ToString()) - CDate(Label1.Text)).ToString() * ComBobox1.Text 'kann von 1 bis 6 sein

    oder

    VB.NET-Quellcode

    1. Label3.Text = Label2.Text * ComBobox1.Text
    Ich bin selbst Neuling, aber du versuchst da mit Strings zu Rechnen, oder? Das geht nicht.
    Desweiteren hast du Option Strict OFF?

    Woher beziehst du denn die Zeiten oder sollen das alles Systemzeiten sein?

    Was genau willst du Multiplizieren?
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Akanel“ ()

    Definiere

    Pixxxas schrieb:

    die Zeit Multiplizieren
    7 MAL (24.Dezember 2016) wäre dann eine Woche oder was?
    Das ist ungefähr dasselbe wie
    4 MAL 5°C IST_GLEICH 20°C.
    ==============
    Also was bitte sehr genau schwebt Dir vor?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Klingt eher nach Multiplikation von TimeSpans.

    VB.NET-Quellcode

    1. Dim TimeSpan1 = Datum1 - Datum2
    2. Dim NewTimeSpan = TimeSpan.FromTicks(TimeSpan1.Ticks * Faktor)

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „VaporiZed“ ()

    @RodFromGermany
    es geht um das Format was in Label2 Angezeigt wird (00:00:36)

    @VaporiZed TimeSpan ist doch die Zeitspanne bzw. die Dauer? wie kann ich mit TimeSpan die Aktuelle Zeit auslesen bzw. er zählt doch nicht mehr weiter wenn das
    Programm geschlossen ist.

    Er soll auch nach einem Neustart des Programmes die Differenz ausrechnen.

    Pixxxas schrieb:

    es geht um das Format was in Label2 Angezeigt wird
    Du hast nicht verstanden, was Du selbst geschrieben hast, es ging mir um das Wort Multiplizieren.
    Also:
    Die Differenz zweier DateTime-Objekte ist ein TimeSpan-Objekt.
    Die Summe aus einem DateTime-Objekt und einem TimeSpan-Objekt ist ein DateTime-Objekt.
    Die Summe zweier DateTime-Objekte ist nicht definiert.
    Denke darüber nach, verinnerliche das und schreibe Deine Lösung auf. :thumbup:
    =========
    Und dies ist Option Strict Off, man könnte es auch als Schwachsinn bezeichnen. Sorry.

    Pixxxas schrieb:

    VB.NET-Quellcode

    1. Label3.Text = Label2.Text * ComBobox1.Text



    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sorry Leute aber ich glaube ich bin zu Doof dazu -.-

    Noch mal ^^

    VB.NET-Quellcode

    1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    2. Label1.Text = "04.05.2017 16:04:43"
    3. Label2.Text = "04.05.2017 12:04:43"
    4. End Sub
    5. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    6. Label3.Text = (CDate(Label1.Text) - CDate(Label2.Text)).ToString()
    7. End Sub


    Dann kommt bei mir 04:00:00 so soll es ja auch sein.

    z.b. Eine Person Brauchte nur 04:00:00 Stunden, Arbeiten Zwei Personen muss ich die Zeit mal Zwei nehmen sprich 08:00:00, wie mache ich? :(

    Es wäre wirklich nett wenn ihr mir dazu ein Beispiel machen könntet, den Datum Uhrzeit Rechnen Kapiere ich nicht :(
    @Pixxxas Falsche Herangehensweise.
    Trenne Daten und GUI :!:
    Und dann so:

    VB.NET-Quellcode

    1. Dim d1 As New DateTime(2017, 5, 4, 16, 4, 43)
    2. Dim d2 As New DateTime(2017, 5, 4, 12, 4, 43)
    3. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    4. Label1.Text = d1.ToString()
    5. Label2.Text = d2.ToString()
    6. End Sub
    7. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    8. Dim ts As TimeSpan = d1 - d2
    9. Label3.Text = ts.ToString()
    10. Dim ts2 As TimeSpan = New TimeSpan(ts.Ticks * 2) ' dieser hier
    11. Label4.Text = ts2.ToString()
    12. End Sub
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dann waren ja meine ersten Gedanken und Versuche ja nicht ganz Falsch ^^

    Aber ich kann ich das z.b. mit der Jetzigen Zeit und ein Ältere Zeit aus ein Label Rechnen?

    Da wird ja das Datum schon Definiert:

    VB.NET-Quellcode

    1. Dim d1 As New DateTime(2017, 5, 4, 16, 4, 43)


    Aber ich möchte gern ein älteres Datum aus ein Label mit der Jetzigen Zeit Rechnen :(
    Ich blick immer noch nicht, was das eigentliche Ziel sein soll, aber wurscht. Der Punkt von RfG (der immer zu beachten ist), dass Daten und GUI getrennt und CEs nicht als Datenspeicher missbraucht werden sollten, ergibt sich doch durch die ganz einfache Frage: woher kommt denn Deine Label-Beschriftung? Mit welchem Code wird das Label mit Daten befüllt? reinschreiben kannst Du zur Laufzeit in ein Label nicht. In eine TextBox, ja, aber ein Label ist eine fixe Beschriftung, die zur Laufzeit nur mit Code befüllt werden kann. Und diese per-Code-Befüllung gilt es eben zu nutzen, um Deine Berechnungen anzustellen.

    kurz: Beantworte bitte die Frage, mit welcher Codezeile Dein Label seine Datumsbeschriftung erhält.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also noch mal ^^

    Person1 Startet am 05.05.2017 08:30 -> wird in einem Label hinterlegt
    Person1 Beendet am 05.05.2017 09:00 (Aktuelle Zeit) wird nicht im Label hinterlegt
    Person1 hat dann eine Differenz von 00:30
    Diese Differenz möchte ich mal Zeit oder mal 3 Rechnen

    Ich hab die Differenz bis jetzt immer so ausgerechnet;

    VB.NET-Quellcode

    1. Label2.Text = (CDate(System.DateTime.Now.ToString()) - CDate(Label1.Text)).ToString()

    Nur jetzt möchte ich die Differenz auch mal 2 oder 3 rechnen, jeh nach dem was in der Combox steht.

    Pixxxas schrieb:

    Person1 Startet am 05.05.2017 08:30 -> wird in einem Label hinterlegt
    Falsch.
    Person1 Startet, DateTime-Instanz wird als solche gemerkt und ggf. in einem Control, nennen wir es spaßeshalber Label1, angezeigt.
    Wenn Du mit dem TimeStamp rechnen willst, verwendest Du die entsprechende DateTime-Instanz und zeigst das Resultat z.B. in Label2 an.
    =====
    Also:
    Daten werden in passenden Variablen gemerkt, nicht aber als String in Controls :!: :!: :!:
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also nochmal ||

    Deine Codeanweisung System.DateTime.Now gehört in eine Variable, da man mit dieser Variablen rechnen kann. Dass Du diese Variable auch nutzen darfst, um Dein Label zu befüllen, klar, warum nicht.
    Label1.Text enthält ein Datum. Und wie gefragt: woher kommt der Text für Label1? Mit welchem Code wird Label1 beschriftet? Die Beschreibung "Person1 Startet am 05.05.2017 08:30 -> wird in einem Label hinterlegt" reicht uns nicht. Oder ist das doch ein fixes Datum? Wohl eher nicht, denn Person1 muss ja irgendwo hinterlegen, wann er mit der Arbeit begonnen hat.
    Sei's drum. In Post#4 und #9 haben @RodFromGermany und ich bereits Deine gewünschten Rechenanweisungen übermittelt. 1. Datum minus 2. Datum ergibt ne TimeSpan. TimeSpan ist ne Zeitdifferenz, also in Deinem konkreten Beispiel 30 Minuten. Wandelst Du diese TimeSpan in Ticks um, kannst Du auch damit rechnen. TimeSpan1.ToTicks * 3 = Anzahl der Ticks, die 3 * 30 Minuten = 90 Minuten entsprechen. Diese verlängerte TimeSpan von 90 Minuten kannst Du per ToString in einer Art ausgeben, wie es Dir passt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Ganz ehrlich, Du scheinst Berartungsresistenz zu sein.
    Dir wurde hier nun mehrfach gesagt das Dein Weg komplett falsch ist. Man kann mit den Strings nicht rechnen, dass hast Du scheinbar noch immer nicht verstanden.
    Desweiteren scheinst Du auch Option Strict On noch nicht umgesetzt zu haben. Unter diesen Umständen macht es überhaupt keinen Sinn weiter zu Programmieren.

    Hinterlegt wird in einem Label auch nichts, damit kannst du höchstens einen Wert anzeigen lassen.

    Schau Dir die Beiträge von RodfromGermany und VaporiZed noch einmal an und verstehe was sie damit meinen.

    Ich lege dir mal das ans Herz Richtiger Weg

    Edit: Die beiden Kollegen waren schneller als ich. :)
    Rechtschreibfehler betonen den künstlerischen Charakter des Autors.
    Wenn Du Dein zum ersten Mal Programm startest (ich nenne das mal Runde 1), wird irgendwie* Dein Person1-fängt-jetzt-an-Label2 beschriftet. Das Programm wird beendet** und für Runde 2 neu gestartet. Ist dann das Label2 noch genauso beschriftet wie in Runde 1?

    * und Du hast immer noch nicht gesagt, wie die Zeile aussieht, die vermutlich mit Label2.Text = beginnt
    ** ob das wirklich sein muss, lässt sich vielleicht klären, wenn wir mit den Grundlagen dorsch sind.

    EDIT: Label1 enthält Now. OK. Was ist mit Label2? Wie wird das beschriftet? Ich will nicht wissen, was drin steht, sondern, mit welchem Code es zu seiner Beschriftung kommt.

    EDIT2: Und alles rausgestrichene wieder entstrichen, da der Text doch berechtigt ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „VaporiZed“ ()

    Label dienen nicht als Datenspeicher, sondern nur zum Anzeigen von Daten!
    Du willst Werte, die beim vorherigen Programmdurchlauf angefallen sind, beim nächsten Neustart wieder zur Verfügung haben? Nimm My.Settings oder speicher dir die Daten, wie du sie benötigst, in z.b. einem *.txt File ab und lese sie beim Neustart wieder ein

    Pixxxas schrieb:

    VB.NET-Quellcode

    1. (CDate(System.DateTime.Now.ToString())
    Kleine Anmerkung:
    Du nimmst ein DateTime Objekt, wandelst es in einen String um und nimmst dann die Hammer-auf-Schraube-Methode(CDate anstatt DateTime.Parse) um wieder ein DateTime zu haben, von dem du dann subtrahierst. Ist dir das bewusst?
    Lass mal CDate und .ToString() weg, und benutz für die Umwandlung von Strings in DateTime DateTime.Parse()/DateTime.ParseExact()

    Auch interessant wäre vielleicht das DateTimePicker Control für dich. Von diesem bekommt man direkt DateTime Objekte, und muss nicht mit Strings hantieren.
    Ich glaube, wir kommen alle mit Theorie und Hinweisen nicht weiter.
    @Pixxxas: Schau Dir mal folgenden Code an. Er dürfte Dir unsere Hinweise näher bringen und Dich Deinem Ziel auch. Das ist kein endgültiger Code, weil immer noch einige Sachen von Deiner Seite nicht geklärt wurden! Du musst jetzt noch festlegen, wodurch der Prozessanfangszeitpunkt festgelegt wird, also Implementierung von LadeZeitpunktDesProzessanfangs (ich hab bei mir mal ne Dummy-Funktion eingebaut, die n DateTime-Konstrukt zurückgibt), und Implementierung von HoleAnzahlDerProzessbeteiligtenPersonen, da Du zwar sagtest, dass irgendwas in ner ComboBox drin steht, aber was genau, weißt nur Du allein.

    VB.NET-Quellcode

    1. Private Sub BerechneEffektiveProzessdauerUndZeigeAlleDatenAn()
    2. LabelMitDemProzessanfangszeitpunkt.Text = LadeZeitpunktDesProzessanfangs.ToString("hh:mm:ss")
    3. LabelMitDemProzessendezeitpunkt.Text = DateTime.Now.ToString("hh:mm:ss")
    4. LabelMitDerTatsaechlichenProzessdauer.Text = (DateTime.Now - LadeZeitpunktDesProzessanfangs()).ToString("hh\:mm\:ss")
    5. LabelMitDerEffektivenProzessdauer.Text = HoleEffektiveProzessdauer.ToString("hh\:mm\:ss") 'tatsächliche Dauer mal Personenzahl
    6. End Sub
    7. Private Function HoleEffektiveProzessdauer() As TimeSpan
    8. Dim ZeitpunktDesProzessanfangs = LadeZeitpunktDesProzessanfangs()
    9. Dim AnzahlDerProzessbeteiligtenPersonen = HoleAnzahlDerProzessbeteiligtenPersonen()
    10. Dim Prozessdauer = DateTime.Now - ZeitpunktDesProzessanfangs
    11. Dim EffektiveProzessdauer = TimeSpan.FromTicks(Prozessdauer.Ticks * AnzahlDerProzessbeteiligtenPersonen)
    12. Return EffektiveProzessdauer
    13. End Function

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.