Schlumpf Geschrieben 9. April 2014 Melden Share Geschrieben 9. April 2014 (bearbeitet) lolipopkebab stellte in [C#] Countdown die frage wie man eine konkrete uhrzeit speichern kann ohne zu parsen oder sonstige mögliche Ungenauigkeiten. ein weg : http://de.wikipedia.org/wiki/Unixzeit Microtime gibt die aktuelle Uhrzeit als Zeichenkette in der Form"Sekunden" zurück. Dabei ist "Sekunden" die Anzahl der Sekunden seit Beginn der UNIX-Epoche (1. Januar 1970 00:00 Uhr UTC) ich nutze zum gegentest : http://www.unixtime.de du kannst dir auch einfach ein php script basteln : http://www.schattenb...t/php/datum.php nachdem du nun ein wenig weist was microtime/timespamp/unix timestamp ist, stellt sich die frage wie in unity ? so : das script gibt auch die aktuelle ( system ) uhrzeit mit aus using UnityEngine; using System.Collections; using System; public class time : MonoBehaviour { // Use this for initialization void Start () { } public String jahr; public String monat; public String tag; public String stunde; public String minute; public String sekunde; public string tagkomplett; public DateTime epochStart; public long timestamp; void Update () { epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Local); jahr = System.DateTime.Now.ToString ("yyyy"); monat = System.DateTime.Now.ToString ("MM"); tag = System.DateTime.Now.ToString ("dd"); stunde = System.DateTime.Now.ToString ("HH"); minute = System.DateTime.Now.ToString ("mm"); sekunde = System.DateTime.Now.ToString ("ss"); tagkomplett= System.DateTime.Now.ToString ("yyyyMMddHHss"); timestamp = Convert.ToInt64((System.DateTime.UtcNow - epochStart).TotalSeconds); Debug.Log (timestamp + " - " + jahr + "." + monat + "." + tag + " " + stunde + ":" + minute + ":" + sekunde + " | " + tagkomplett); } } kurzform ( nur microtime ): using UnityEngine; using System.Collections; using System; public class time : MonoBehaviour { // Use this for initialization void Start () { } void Update () { DateTime epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Local); long timestamp = Convert.ToInt64((System.DateTime.UtcNow - epochStart).TotalSeconds); Debug.Log (timestamp); } } es wird einfach ein c# script erstellt mit dem namen time. oder das aus dem anhang entpackt das wird auf die maincam gezogen und der code hier reinkopiert ( der vorhandene code komplett gelöscht ). nach klick auf play kommt das hier im log : 1397052389 - 2014.04.09 16:06:29 UnityEngine.Debug:Log(Object) time:Update() (at Assets/time.cs:27) 1397052389 = timestamp 2014.04.09 16:06:29 die echte uhrzeit aber stimmt der timestamp ? einfach nach http://www.unixtime.de gehen und 1397052389 eintragen : Realzeit: 09.04.2014 - 16:06:29 gegen die datenbank einen wert prüfen is so total einfach : 60 Sekunden = 1Minute60 Minuten = 1 Stunde 24 Stunden = 1Tag d.h. 24Stunden x 60 Minuten = 1440 Minuten entstprechen 1 Tag 1440Minuten x 60 Sekunden = 86400 Sekunden entsprechen 1 Tag PSEUDOCODE !!! var db_timestamp = select timestamp from db;//das letzte klicken in microtime aus der DB var zwischenspeicher=db_timestamp+86400; //die microtime + 24h if (zwischenspeicher<=timestamp){//timestamp ist aus obrigem code die aktuelle zeit debug.log("zeige button"); }else{ debug.log("warte noch"); } das sollte eigentlich alles sein was man dazu braucht. zu beachten sind aber die verschiedenen zeitzonen : d.h. wenn du z.b. einen server in den usa hast, hat der zum "jetzt" zeitpunkt ein anderes timestamp wie du da musst du dann ein wenig anpassen : http://de.wikipedia.org/wiki/Zeitzone DE : epochStart = new System.DateTime(1970, 1, 1, 0, 0, 0, System.DateTimeKind.Local); US ( unter vorbehalt ) epochStart = new System.DateTime(1970, 1, 1, 8, 0, 0, System.DateTimeKind.Local); der "pitch" ist quasi so: jahre,monate,tage,stunden,minuten,sekunden wenn man nun 8 stunden weiter sein will kommt ne 8 rein de =0 us =8 oder du machst einfach die zeit in unity zur einzigen gültigen zeit und rechnest nur mit dieser. dadurch das die nur "intern" verwendet wird passiert das problem nicht. z.b. speicher die "interne" zeit in der datenbank und prüfe die interne zeit + 24h ( 86400 Sekunden ) gegen die zeit die du in der datenbank gespeichert hast ( siehe code oben ) time20140409162529.rar bearbeitet 9. April 2014 von Schlumpf 3 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Ahteris Geschrieben 9. April 2014 Melden Share Geschrieben 9. April 2014 wurr so viel code.... hier meine Lösung: uhrzeit = DateTime.Now.ToString("[HH:MM:ss] "); Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Schlumpf Geschrieben 9. April 2014 Autor Melden Share Geschrieben 9. April 2014 wurr so viel code.... hier meine Lösung: uhrzeit = DateTime.Now.ToString("[HH:MM:ss] "); am thema vorbei würd ich mal sagen [21:04:36] UnityEngine.Debug:Log(Object) time:Update() (at Assets/time.cs:14) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
UnityForumLOL Geschrieben 11. April 2014 Melden Share Geschrieben 11. April 2014 Vielen Dank 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
QuesterDesura Geschrieben 12. April 2014 Melden Share Geschrieben 12. April 2014 wieso ist das am thema vorbei das macht genau das was du wolltest Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Siebenkeim Geschrieben 12. April 2014 Melden Share Geschrieben 12. April 2014 Dann hast du es wohl auch nicht verstanden, was Schlumpf eigentlich gemacht hat. 1 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.