print - python stampare ora




Come ottenere l'ora corrente in Python (20)

Qual è il modulo / metodo utilizzato per ottenere l'ora corrente?


Come ottengo l'ora corrente in Python?

Il modulo del time

Il modulo del time fornisce funzioni che ci indicano l'ora in "secondi dall'epoca" e altre utilità.

import time

Unix Epoch Time

Questo è il formato in cui inserire la data e l'ora per il salvataggio nei database. È un semplice numero in virgola mobile che può essere convertito in un numero intero. È anche utile per l'aritmetica in secondi, poiché rappresenta il numero di secondi dal 1 ° gennaio 1970 alle 00:00:00, ed è la luce della memoria relativa alle altre rappresentazioni del tempo che vedremo in seguito:

>>> time.time()
1424233311.771502

Questo timestamp non tiene conto dei secondi bisestili, quindi non è lineare - i secondi bisestili vengono ignorati. Quindi, anche se non è equivalente allo standard internazionale UTC, è vicino, e quindi abbastanza buono per la maggior parte dei casi di tenuta dei registri.

Questo non è l'ideale per la pianificazione umana, tuttavia. Se si dispone di un evento futuro che si desidera eseguire in un determinato momento, è necessario archiviarlo con una stringa che può essere analizzata in un oggetto datetime o in un oggetto datetime serializzato (verranno descritti in seguito).

time.ctime

Puoi anche rappresentare l'ora corrente nel modo preferito dal tuo sistema operativo (il che significa che può cambiare quando cambi le tue preferenze di sistema, quindi non fare affidamento su questo per essere standard su tutti i sistemi, come ho visto altri si aspettano) . In genere è facile da usare, ma in genere non genera stringhe che è possibile ordinare cronologicamente:

>>> time.ctime()
'Tue Feb 17 23:21:56 2015'

Puoi idratare i timestamp in forma leggibile dall'uomo anche con ctime :

>>> time.ctime(1424233311.771502)
'Tue Feb 17 23:21:51 2015'

Questa conversione non va bene anche per la conservazione dei registri (eccetto che nel testo che sarà analizzato solo dagli umani) e con il miglior riconoscimento ottico dei caratteri e l'intelligenza artificiale, penso che il numero di questi casi diminuirà).

modulo datetime

Il modulo datetime è anche abbastanza utile qui:

>>> import datetime

datetime.datetime.now

Il datetime.now è un metodo di classe che restituisce l'ora corrente. Usa time.localtime senza le informazioni sul fuso orario (se non specificato, altrimenti vedi sotto il fuso orario). Ha una rappresentazione (che ti permetterebbe di ricreare un oggetto equivalente) echeggiata sulla shell, ma una volta stampata (o forzata a uno str ), è in formato leggibile dall'uomo (e quasi ISO) e l'ordinamento lessicografico è equivalente a l'ordine cronologico:

>>> datetime.datetime.now()
datetime.datetime(2015, 2, 17, 23, 43, 49, 94252)
>>> print(datetime.datetime.now())
2015-02-17 23:43:51.782461

l' utcnow di datetime

In questo modo è possibile ottenere un oggetto datetime nell'ora UTC, uno standard globale:

>>> datetime.datetime.utcnow()
datetime.datetime(2015, 2, 18, 4, 53, 28, 394163)
>>> print(datetime.datetime.utcnow())
2015-02-18 04:53:31.783988

UTC è uno standard temporale quasi equivalente al fuso orario GMT. (Mentre GMT e UTC non cambiano per l'ora legale, i loro utenti possono passare ad altri fusi orari, come l'ora legale britannica, durante l'estate.)

Data / ora fuso orario consapevole

Tuttavia, nessuno degli oggetti datetime creati finora può essere facilmente convertito in vari fusi orari. Possiamo risolvere questo problema con il modulo pytz :

>>> import pytz
>>> then = datetime.datetime.now(pytz.utc)
>>> then
datetime.datetime(2015, 2, 18, 4, 55, 58, 753949, tzinfo=<UTC>)

Equivalentemente, in Python 3 abbiamo la classe timezone con un'istanza timezone utc collegata, che rende anche l'oggetto timezone consapevole (ma per convertire in un altro fuso orario senza il pratico modulo pytz viene lasciato come esercizio al lettore):

>>> datetime.datetime.now(datetime.timezone.utc)
datetime.datetime(2015, 2, 18, 22, 31, 56, 564191, tzinfo=datetime.timezone.utc)

E vediamo che possiamo facilmente convertire in fusi orari dall'oggetto utc originale.

>>> print(then)
2015-02-18 04:55:58.753949+00:00
>>> print(then.astimezone(pytz.timezone('US/Eastern')))
2015-02-17 23:55:58.753949-05:00

È anche possibile rendere un oggetto datetime ingenuo consapevole del metodo di localize fuso orario di pytz o sostituendo l'attributo tzinfo (con la replace , questo viene fatto alla cieca), ma queste sono più ultime località rispetto alle migliori pratiche:

>>> pytz.utc.localize(datetime.datetime.utcnow())
datetime.datetime(2015, 2, 18, 6, 6, 29, 32285, tzinfo=<UTC>)
>>> datetime.datetime.utcnow().replace(tzinfo=pytz.utc)
datetime.datetime(2015, 2, 18, 6, 9, 30, 728550, tzinfo=<UTC>)

Il modulo pytz ci consente di rendere i nostri oggetti datetime timezone consapevoli e di convertire i tempi in centinaia di fusi orari disponibili nel modulo pytz .

Uno potrebbe apparentemente serializzare questo oggetto per l'ora UTC e archiviarlo in un database, ma richiederebbe molta più memoria ed essere più incline all'errore rispetto alla semplice memorizzazione del tempo di Epoch Unix, che ho dimostrato per primo.

Gli altri modi di visualizzare i tempi sono molto più inclini agli errori, specialmente quando si tratta di dati che potrebbero provenire da fusi orari diversi. Volete che non ci sia confusione su quale fuso orario è stato progettato per una stringa o un oggetto datetime serializzato.

Se stai visualizzando l'ora con Python per l'utente, ctime funziona bene, non in una tabella (in genere non si ordina bene), ma forse in un orologio. Tuttavia, personalmente raccomando, quando si ha a che fare con il tempo in Python, usando il tempo Unix o un oggetto datetime UTC con fuso orario.


Fare

from time import time

t = time()
  • t - float number, buono per la misurazione dell'intervallo di tempo.

C'è qualche differenza per le piattaforme Unix e Windows.


Per impostazione predefinita, now() funzione now() restituisce l'output nel formato YYYY-MM-DD HH:MM:SS:MS . Utilizzare lo script di esempio seguente per ottenere la data e l'ora correnti in uno script Python e stampare i risultati sullo schermo. Crea il file getDateTime1.py con il contenuto sottostante.

import datetime

currentDT = datetime.datetime.now()
print (str(currentDT))

L'output appare come di seguito:

2018-03-01 17:03:46.759624

Perché non chiedere all'US Naval Observatory , il cronometrista ufficiale della Marina degli Stati Uniti?

import requests
from lxml import html

page = requests.get('http://tycho.usno.navy.mil/cgi-bin/timer.pl')
tree = html.fromstring(page.content)
print(tree.xpath('//html//body//h3//pre/text()')[1])

Se vivi nell'area DC (come me) la latenza potrebbe non essere troppo male ...


Prova il modulo freccia da http://crsmithdev.com/arrow/ :

import arrow
arrow.now()

Oppure la versione UTC:

arrow.utcnow()

Per cambiare il suo output, aggiungi .format ():

arrow.utcnow().format('YYYY-MM-DD HH:mm:ss ZZ')

Per un fuso orario specifico:

arrow.now('US/Pacific')

Un'ora fa:

arrow.utcnow().replace(hours=-1)

O se vuoi l'essenza.

arrow.get('2013-05-11T21:23:58.970460+00:00').humanize()
>>> '2 years ago'

Puoi usare time.strftime() :

>>> from time import gmtime, strftime
>>> strftime("%Y-%m-%d %H:%M:%S", gmtime())
'2009-01-05 22:14:39'

Puoi usare questa funzione per ottenere il tempo (purtroppo non dice AM o PM):

def gettime():
        from datetime import datetime
        return ((str(datetime.now())).split(' ')[1]).split('.')[0]

Per ottenere le ore, i minuti, i secondi e i millisecondi da unire in un secondo momento, puoi utilizzare queste funzioni:

Ora:

def gethour():
        from datetime import datetime
        return return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[0]

Minute:

def getminute():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[1]

Secondo:

def getsecond():
        from datetime import datetime
        return (((str(datetime.now())).split(' ')[1]).split('.')[0]).split(':')[2]

millisecond:

def getmillisecond():
        from datetime import datetime
        return return (str(datetime.now())).split('.')[1]

Quello che segue è quello che uso per ottenere il tempo senza dover formattare. Ad alcune persone non piace il metodo split, ma è utile qui:

from time import ctime
print ctime().split()[3]

Stampa in formato HH: MM: SS.


Questo è quello che ho finito con:

>>>from time import strftime
>>>strftime("%m/%d/%Y %H:%M")
01/09/2015 13:11

Inoltre, questa tabella è un riferimento necessario per scegliere i codici di formato appropriati per ottenere la formattazione della data nel modo desiderato (dalla documentazione "datetime" di Python here ).


Se hai bisogno di tempo corrente come oggetto time :

>>> import datetime
>>> now = datetime.datetime.now()
>>> datetime.time(now.hour, now.minute, now.second)
datetime.time(11, 23, 44)

Se si utilizza già NumPy, è possibile utilizzare direttamente la funzione numpy.datetime64 ().

import numpy as np
str(np.datetime64('now'))

Solo per la data:

str(np.datetime64('today'))

Oppure, se usi già Pandas, puoi utilizzare la funzione pandas.to_datetime ():

import pandas as pd
str(pd.to_datetime('now'))

O:

str(pd.to_datetime('today'))

Semplice e facile:

Utilizzando il modulo datetime ,

import datetime
print(datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))

Produzione:

2017-10-17 23:48:55

O

Usando il time ,

import time
print(time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime()))

Produzione:

2017-10-17 18:22:26

Tutti buoni suggerimenti, ma trovo più facile usare ctime() me stesso:

In [2]: from time import ctime
In [3]: ctime()
Out[3]: 'Thu Oct 31 11:40:53 2013'

Questo dà una rappresentazione di stringa ben formattata dell'ora locale corrente.


Usando Pandas per ottenere l'ora corrente, un po 'come uccidere il problema a portata di mano:

import pandas as pd
print (pd.datetime.now())
print (pd.datetime.now().date())
print (pd.datetime.now().year)
print (pd.datetime.now().month)
print (pd.datetime.now().day)
print (pd.datetime.now().hour)
print (pd.datetime.now().minute)
print (pd.datetime.now().second)
print (pd.datetime.now().microsecond)

Produzione:

2017-09-22 12:44:56.092642
2017-09-22
2017
9
22
12
44
56
92693

Voglio ottenere il tempo con millisecondi. Un modo semplice per ottenerli:

import time, datetime

print(datetime.datetime.now().time())                         # 11:20:08.272239

# Or in a more complicated way
print(datetime.datetime.now().time().isoformat())             # 11:20:08.272239
print(datetime.datetime.now().time().strftime('%H:%M:%S.%f')) # 11:20:08.272239

# But do not use this:
print(time.strftime("%H:%M:%S.%f", time.localtime()), str)    # 11:20:08.%f

Ma voglio solo millisecondi , giusto? Il modo più breve per ottenerli:

import time

time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 1000)
# 11:34:23.751

Aggiungere o rimuovere gli zeri dall'ultima moltiplicazione per regolare il numero di punti decimali o semplicemente:

def get_time_str(decimal_points=3):
    return time.strftime("%H:%M:%S", time.localtime()) + '.%d' % (time.time() % 1 * 10**decimal_points)

.isoformat() è nella documentazione, ma non è ancora qui (questo è molto simile alla risposta di @Ray Vega):

>>> import datetime
>>> datetime.datetime.now().isoformat()
'2013-06-24T20:35:55.982000'

>>> from datetime import datetime
>>> datetime.now().strftime('%Y-%m-%d %H:%M:%S')

Per questo esempio, l'output sarà simile a questo: '2013-09-18 11:16:32'

Ecco la lista di strftime .


>>> from time import gmtime, strftime
>>> strftime("%a, %d %b %Y %X +0000", gmtime())
'Tue, 06 Jan 2009 04:54:56 +0000'

Questo emette il GMT corrente nel formato specificato. C'è anche un metodo localtime ().

Questa page ha più dettagli.


from time import ctime

// Day {Mon,Tue,..}
print ctime().split()[0]
// Month {Jan, Feb,..}
print ctime().split()[1]
// Date {1,2,..}
print ctime().split()[2]
// HH:MM:SS
print ctime().split()[3]
// Year {2018,..}
print ctime().split()[4]

Quando si chiama ctime () convertirà i secondi in stringa in formato 'Giorno mese Data HH: MM: SS Anno' (ad esempio: 'Mer 17 gennaio 16:53:22 2018'), quindi si chiama il metodo split () che creerà una lista dalla stringa ['Wed', 'Jan', '17', '16:56:45', '2018'] (il delimitatore predefinito è lo spazio).

Le parentesi sono utilizzate per selezionare l'argomento desiderato nell'elenco.

Uno dovrebbe chiamare solo una riga di codice. Non si dovrebbero chiamarli come ho fatto io, questo era solo un esempio, perché in alcuni casi si ottengono valori diversi, casi rari ma non impossibili.


import datetime
date_time = datetime.datetime.now()

date = date_time.date()  # Gives the date
time = date_time.time()  # Gives the time

print date.year, date.month, date.day
print time.hour, time.minute, time.second, time.microsecond

Do dir(date) o qualsiasi variabile incluso il pacchetto. È possibile ottenere tutti gli attributi e i metodi associati alla variabile.





time