Jump to content
Unity Insider Forum

[c#] microtime


Schlumpf

Recommended Posts

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 = 1Minute

60 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 von Schlumpf
Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...