Page 1 of 2 1 2 LastLast
Showing results 1 to 10 of 14

Thread: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

  1. #1
    Join Date
    27.08.2011
    Posts
    88

    Default C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Hallo,

    versuche verzweifelt über VSTA (C#) eine Stringvariable von Zenon, die ein Datum im Format dd.MM.yyyy enthält ins DateTime oder Unix timestamp umzuwandeln um diesen als "SelDay" in folgendem Codeteil zu verwenden:

    public void Macro_SelectedDay()
            {
                try
                {
                    obTr1_Var.Item("Trend1_Parameter.Starttime").set_Value(0, (Convert.ToUInt32(SelDay.Date.Subtract(new DateTime(1970, 1, 1)).TotalSeconds)) - 3600);
                    obTr1_Var.Item("Trend1_Parameter.Endtime").set_Value(0, Convert.ToUInt32(obTr1_Var.Item("Trend1_Parameter.Starttime").get_Value(0)) + 86400);
                    Macro_Trend_Zellen();
                }
    
                catch (Exception ex)
                { 
                    MessageBox.Show("ERROR ThisProject_Startup : " + ex.Message + " " + ex.Source);
                    return;
                }
            }

    Jemand eine Idee??

    Danke für eure Hilfe

    Johannes

  2. #2
    Join Date
    13.08.2013
    Posts
    57

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Ich weiß nicht ob ich da Frage richtige verstanden habe, aber versuchs mal hiermit, liest den String einer zenon Variable und wandelt in ein DateTime Objekt

     public DateTime StringTODateTime()
            {
                string MyDateAsString = this.Variables().Item("MyDateTimeString").get_Value(0).ToString();
                string[] split = MyDateAsString.Split('.');  //z.B. 1.12.1999  tag= split[0]=1, Monat= split[1]=12 Jahr=split[2]=1999
                //Für den Konstuktur von DateTime müssen die Argumente umgedreht werden public DateTime(int year, int month, int day);
                DateTime datetime = new DateTime(int.Parse(split[2]), int.Parse(split[1]), int.Parse(split[0]));  //Achtung hier können Exceptions auftreten wenn der String nicht im Format dd.mm.yyyy war....
                return datetime;
    
            }


    Sigi

  3. #3
    Join Date
    27.08.2011
    Posts
    88

    Daumen hoch Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Super, danke für die Hilfe!

  4. #4
    Join Date
    27.08.2011
    Posts
    88

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Hallo,

    hatte mein Problem folgendermaßen gelöst (siehe Code) und das hat auch soweit funktioniert....bis zur Zeitumstellung am Samstag


    public void Macro_Tr1_ActualDay()
            {
                DateTime ActDay = DateTime.Now;
                obTr1_Var.Item("Tr1_Parameter.Starttime").set_Value(0, (Convert.ToUInt32(ActDay.Date.Subtract(new DateTime(1970, 1, 1)).TotalSeconds)) - 3600);
                obTr1_Var.Item("Tr1_Parameter.Endtime").set_Value(0, Convert.ToUInt32(obTr1_Var.Item("Tr1_Parameter.Starttime").get_Value(0)) + 86400);
                obTr1_Var.Item("Tr1_Parameter.Startdate").set_Value(0, (ActDay.ToString("dd.MM.yyyy")));
                Macro_Trend_1();
            }
    
            public void Macro_Tr1_SelectedDay()
            {
                try
                {
                    DateTime SelDay = Convert.ToDateTime(obTr1_Var.Item("Tr1_Parameter.Startdate").get_Value(0).ToString());
                    obTr1_Var.Item("Tr1_Parameter.Starttime").set_Value(0, (Convert.ToUInt32(SelDay.Date.Subtract(new DateTime(1970, 1, 1)).TotalSeconds)) - 3600);
                    obTr1_Var.Item("Tr1_Parameter.Endtime").set_Value(0, Convert.ToUInt32(obTr1_Var.Item("Tr1_Parameter.Starttime").get_Value(0)) + 86400);
                    Macro_Trend_1();
                }
    
                catch (Exception ex)
                {
                    MessageBox.Show("ERROR Tr1_SelectedDay: " + ex.Message + " " + ex.Source);
                    return;
                }
            }

    Mir ist auch klar warum das Problem auftritt, da Zenon ja die Archivwerte im UTC Format speichert...Dementsprechend müsste ich für ein Datum, das in die Sommerzeit fällt 7200 Sekunden abziehen statt 3600.

    Wie kann ich das Problem lösen?

    Danke für die Hilfe

    Johannes

  5. #5
    Join Date
    27.08.2011
    Posts
    88

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Im Prinzip bräuchte ich eine Funktion, die das Datum (local Time) in den epoch timestamp umwandelt!

  6. #6
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    http://www.epochconverter.com/
    ...
    C#

    var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;


  7. #7
    Join Date
    13.08.2013
    Posts
    57

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Naja du könntest prüfen ob gerade Sommer oder Winterzeit auf dem System ist und dann 7200 oder 3600 abziehen.
    DateTime.Now.IsDaylightSavingTime();
    Oder gleich die UTC Zeit nutzen.
     DateTime.UtcNow;

    Best regards

  8. #8
    Join Date
    27.08.2011
    Posts
    88

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Vielleicht zum besseren Verständnis:

    Mich interressiert jeweils der Tagesbeginn, also 00:00:00h, da ich bei meinem Trend immer einen Tag anzeigen will.

    Beim Macro_Actual_Day rufe ich den Trend des aktuellen Tages auf, während beim Macro_Selected_Day ein String von einem ActiveX Element (DTPicker) eingelesen wird.

    Ich habe also eine Variable Tr1_Parameter.Startdate die das Datum als String enthält (localtime mit/ohne Sommerzeit) und diese muss ich in den Unix timestamp umwandeln (UTC), damit ich die Funktionsparameter setzen kann:

    //Start- und Endzeitpunkt setzen
                this.RtFunctions().Item("Tbs_MainTrend1_Template").set_DynProperties("PictFilter[0].TimeAxe.TimeFilter.ARVTime1", obTr1_Var.Item("Tr1_Parameter.Starttime").get_Value(0));
                this.RtFunctions().Item("Tbs_MainTrend1_Template").set_DynProperties("PictFilter[0].TimeAxe.TimeFilter.ARVTime2", obTr1_Var.Item("Tr1_Parameter.Endtime").get_Value(0));

    Vielleicht ist es jetzt etwas verständlicher?

  9. #9
    Join Date
    27.08.2011
    Posts
    88

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Quote Originally Posted by herberto View Post
    http://www.epochconverter.com/
    ...
    C#

    var epoch = (DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
    So in der Art, aber statt DateTime.UtcNow eben "Heute 00:00:00h" bzw "dd.MM.yyyy 00:00:00h"!

  10. #10
    Join Date
    30.05.2007
    Location
    Salzburg
    Posts
    879

    Default Re: C#: String mit Datum (dd.MM.yyyy) in DateTime oder Unix Timestamp umwandeln

    Mich interressiert jeweils der Tagesbeginn, also 00:00:00h, da ich bei meinem Trend immer einen Tag anzeigen will
    -> das geht ganz ohne Programmierung
    -> in der Bildumschaltfunktion zum ETM (Reiter "Zeit") einfach auf "Ein Tag" stellen
    -> zusammen mit der Option "Zeige diesen Dialog zur Runtime" wird dann ein entrspechenden Kalender-Control aufgeschalten


Similar Threads

  1. Alarm Timestamp
    By kavya in forum zenon Supervisor
    Replies: 6
    Last Post: 15th October 2013, 12:06
  2. String length field for STRING variables.
    By stolyarov_as in forum zenon Supervisor
    Replies: 3
    Last Post: 11th January 2013, 07:49
  3. Replies: 1
    Last Post: 17th September 2012, 15:07
  4. UTC datetime from IPA
    By fabios in forum VBA
    Replies: 2
    Last Post: 12th May 2011, 19:12
  5. Rezepte mit String-Variablen
    By sam9188 in forum zenon Supervisor
    Replies: 1
    Last Post: 9th January 2011, 23:04

Posting Rules

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •