Bekommen Unix - / Epoch-Zeit als Int
Gibt es eine Funktion in haskell, die für die Epoche Zeit in Sekunden /Millisekunden ?
vielleicht etwas ähnlich zu java ist
System.currentTimeMillis();
edit: wie Int
oder Integer
?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja.
getCurrentTime :: IO UTCTime
.UNIX-Epoche Zeit abgerufen werden konnten, als
Int
so:UPD: wie die anderen Nutzer bemerkt, ist es viel einfacher Weg, dies zu tun:
Control.Applicative
. Aktualisiert die Antwortfmap
getPOSIXTime kommt als t :: IO IntegerInt
der aktuellen Zeit, öbv.IO
unreine Betrieb. Man kann nicht sagen, dass jedergetPOSIXTime
Aufruf gibt Sie den gleichen Wert.Versuchen Sie dies:
Es hat 6 Dezimalstellen Genauigkeit.
Data.Time
importieren.t
istIO POSIXTime
Frage ist dazu, wie einInt
.Wie etwa:
timeInMicros
ein paar mal im ghci, Sie werden sofort sehen, dass zurück fast zufällige Ausgabe! Einen moment ist es1538705499660488167
, kurz nachdem es769352750056244969
die Hälfte der Größe. Sie können eineRational
und dann einfach immer dienumerator
- das ist wie gesagt etwas dauert5/365
Jahren, so ist es 5 Jahre!time-1.8.0.2
.)numerator
von etwas, das immern % 1
jedoch zurück, wenn ich schrieb dieses snippetgetPOSIXTime
zurückgegebenseconds.micros
, aber jetzt kehrt es zurückseconds.nanos
. Sowieso, es gibt wohl bessere Wege, dies zu tun. Zur Zeit habe ich nur verwendetround
stattnumerator . toRational
.Gibt es auch eine Lösung diskutiert, die in Real World Haskell:
System.Time
Paket die in der Regel sollte ersetzt werden durchData.Time
.Vielleicht:
Round
ist integer, das ist eigentlich nicht zwingend...ursprüngliche Antwort war ohne
(1000*)
- ist nun behobengetCurrentTime >>= pure . (1000*) . utcTimeToPOSIXSeconds >>= pure . round
. Beide funcs stehen in den Daten.Zeit.Uhr.POSIX. Diese (im GHCi) gibt die Millisekunden der aktuellen UhrzeitDies funktioniert:
unsafePerformIO Extrakten Zeit aus der IO-Monade. Rundung Int-ergibt dann das gewünschte Ergebnis.
UPDATE:
In meiner Haskell-web-Anwendungen, manchmal benutze ich unsafePerformIO zu füllen HTML-checkbox und radio button-Formen mit zufälligen zahlen und versteckten Zeitstempel. Manchmal ist mein text Feld und Textfeld-Formularen können die Benutzer (Spieler interaktive Spiele), um Daten wie etwa durch willkürliche zahlen-und Datumsangaben. Justin, ich hoffe, Sie glaube nicht, dass die vom Benutzer angegebenen Werte sind sicherer als die zufälligen zahlen-und Zeit-Stempel, die ich liefern, um die Formen? Und ich hoffe, Sie glaube nicht, dass ich zu bedeuten, "die Dinge, wie unsafePerformIO wenn Sie nicht verstehen, was du tust."
Web-Browser verwenden HTML, CSS und Javascript. Sie können nicht "halten Sie es in der IO-Monade", und der Browser nicht mehr oder weniger sicher, je nachdem, wie die Werte, die Sie erhalten kam aus der Haskell-Monaden.
Justin, zum nutzen eines jeden, der diese Seite liest, bitte ich Sie zu überdenken, und wenn Sie sagen, noch denke ich, "wirklich nicht benutzen sollte unsafePerformIO diese Weise"? Mein Geist ist offen. Ich habe nicht nur eine Ahnung, was, wenn überhaupt, könnte ich vielleicht falsch mache in meiner Arbeit, oder warum sollten die Leser entmutigt vom lernen, von mir durch die beiden nach unten Stimmen.
P. S. ich habe gehört, dass man nicht sagen sollte #@!% vor den Kindern oder in gemischten Unternehmen. Habe Veröffentliche ich die "U" - Wort, wo die Neulinge könnten es sehen? Himmel bewahre! -DS
unsafePerformIO
diese Weise. Es ist meist nützlich, für den Aufruf von Funktionen, die Sie kennen, sind Reine Verwendung von FFI. Siehe dieser thread SO für mehr info. Wenn du tust, IO, halten Sie es in der IO-Monade und Ihre Anwendung sicherer zu nutzen und zu erweitern. Verwenden Sie nur Dinge wieunsafePerformIO
wenn du wirklich verstehst, was du tust.unsafePerformIO
. Allgemein gesagt, sollten Sie nicht verwendenunsafePerformIO
zu führen, dass Art von IO. Ja, es ist gut (in meinem Buch), es zu benutzen, greifen einige Zufallszahlen, die für eine Las-Vegas-Algorithmus, wie Quickselect (aber nicht für eine Monte-Carlo-one), und es ist in Ordnung, es zu benutzen, ermöglichen eine gleichzeitige Algorithmus zu implementieren, die eine Reine Funktion (ich bin mir zwar ziemlich sicher, dass es höher-level-Funktionen zu tun, die ein wenig mehr schön, aber immer noch gefährlich), und es ist sicherlich gut für die (Reine) FFI Sachen, aber diese sind nicht die Art von Dingen, die Sie tun.