2013-07-04 10 views
8

Próbuję sformatować czas (w sekundach) jako czas i otrzymuję wyniki wskazujące, że mam gdzieś przypisać epokę. Spodziewałem się, że os.date("%X", 0) będzie produkować "00:00:00", ale powróci "20:00:00", a także wartość daty "12/31/69" (nie potrzebuję jednak daty kalendarzowej).Używanie Lua do formatowania 0 sekund jako 00:00:00

Czy istnieje standardowy sposób uzyskania łańcucha czasu trwania, który powoduje 0 sekund, aby wytworzyć zegar reprezentujący w sumie zero sekund? Nie mogę znaleźć żadnego przykładu tego, co próbuję zrobić.

Dzięki

Odpowiedz

16

W większości systemów (czyli POSIX) os.date("%X",0) daje czas epoki, która 00:00:00 (Skoordynowany czas uniwersalny, UTC), 1 stycznia 1970. Otrzymujesz 20:00:00, ponieważ jesteś w innej strefie czasowej.

Aby wymusić UTC zamiast swojej strefy czasowej, należy rozpocząć format od !. Jest to wymienione w manual.

Tak, użyj os.date("!%X",0), aby uzyskać 00:00:00 zgodnie z potrzebami. Będzie działać z każdą sekundą mniej niż jeden dzień (86400). Na przykład: os.date("!%X",70) daje 00:01:10: 1 minuta i 10 sekund.

5

Lua nie posiada ogromną bibliotekę standardową:

string.format("%.2d:%.2d:%.2d", s/(60*60), s/60%60, s%60) 
+2

To działa dobrze po ustaleniu kolejności operacji: s/(60 * 60) – Patillac

+0

Tak, przepraszam, nie przetestowałem tego. Też brakowało mi modułu na minuty. – mxcl

+2

'os.date' może to zrobić. Zobacz moją odpowiedź. – lhf

Powiązane problemy