Dize tarih saatine d├Ân├╝┼čt├╝rme


Al─▒nan cevaba git


Dizge olarak b├Âyle bir tarih-tarih listesi var:

 Jun 1 2005  1:33PM
Aug 28 1999 12:00AM
 

Bunlar─▒ bir veritaban─▒ndaki uygun tarih-zaman alanlar─▒na geri sokaca─č─▒m, bu y├╝zden onlar─▒ ger├žek tarih-zaman nesnelerine b├╝y├╝lemem gerekiyor.

Bu Django'nun ORM'inden ge├žiyor, bu y├╝zden ekleme i┼člemini yapmak i├žin SQL kullanam─▒yorum.


1999





2009-01-21




Cevap say─▒s─▒n─▒ say: 19






datetime.strptime dizeleri tarihlere ay─▒rmak i├žin kullan─▒lan ana yordamd─▒r. Verdi─činiz format dizesi taraf─▒ndan belirlenen format ile her t├╝rl├╝ format─▒ y├Ânetebilir:

 from datetime import datetime

datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
 

Sonu├žta ortaya ├ž─▒kan datetime nesne zaman a┼č─▒m─▒na u─čram─▒┼čt─▒r.

Ba─člant─▒lar:

Notlar:

  • strptime = "string ayr─▒┼čt─▒rma zaman─▒"
  • strftime = "string format time"
  • Bug├╝n y├╝ksek sesle telaffuz edin ve 6 ay i├žinde tekrar aramak zorunda kalmayacaks─▒n─▒z.

3184







├ť├ž├╝nc├╝ parti dateutil k├╝t├╝phanesini kullan─▒n :

 from dateutil import parser
parser.parse("Aug 28 1999 12:00AM")  # datetime.datetime(1999, 8, 28, 0, 0)
 

Ayr─▒┼čt─▒rman─▒z gerekenler dahil olmak ├╝zere ├žo─ču tarih bi├žimini i┼čleyebilir. strptime ├ço─ču zaman do─čru format─▒ tahmin edebilece─činden daha uygundur .

Okunabilirli─čin performanstan daha ├Ânemli oldu─ču testler yazmak i├žin ├žok kullan─▒┼čl─▒d─▒r.

Bunu ile y├╝kleyebilirsiniz:

 pip install python-dateutil
 

761







Check out strptime i├žinde zaman mod├╝l├╝. Bu strftime'in tersidir .

 $ python
>>> import time
>>> time.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
time.struct_time(tm_year=2005, tm_mon=6, tm_mday=1,
                 tm_hour=13, tm_min=33, tm_sec=0,
                 tm_wday=2, tm_yday=152, tm_isdst=-1)
 

477







Baz─▒ g├╝zel ifadeleri d├Ân├╝┼čt├╝rebilecek bir proje haz─▒rlad─▒m. Zaman ├žizelgesine g├Âz at─▒n .

─░┼čte a┼ča─č─▒da baz─▒ ├Ârnekler:

pip install timestring
 >>> import timestring
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm')
<timestring.Date 2015-08-15 20:40:00 4491909392>
>>> timestring.Date('monday, aug 15th 2015 at 8:40 pm').date
datetime.datetime(2015, 8, 15, 20, 40)
>>> timestring.Range('next week')
<timestring.Range From 03/10/14 00:00:00 to 03/03/14 00:00:00 4496004880>
>>> (timestring.Range('next week').start.date, timestring.Range('next week').end.date)
(datetime.datetime(2014, 3, 10, 0, 0), datetime.datetime(2014, 3, 14, 0, 0))
 

106







Bunu hat─▒rlay─▒n ve tarih-saat d├Ân├╝┼č├╝m├╝nde tekrar kafan─▒z kar─▒┼čmas─▒na gerek yoktu.

Datetime nesnesine dize = strptime

datetime nesnesi di─čer bi├žimlere = strftime

Jun 1 2005 1:33PM

e┼čittir

%b %d %Y %I:%M%p

% b Yerel ayar─▒n k─▒salt─▒lm─▒┼č ad─▒ (Ay)

% d Ay─▒n g├╝n├╝, s─▒f─▒r dolgulu bir ondal─▒k say─▒ olarak (1)

Y├╝zde Y Y─▒la Ondal─▒k Say─▒ Olarak (2015)

% I Hour (12 saatlik saat) s─▒f─▒r dolgulu ondal─▒k say─▒ olarak (01)

S─▒f─▒r dolgulu ondal─▒k say─▒ olarak% M Dakika (33)

% p Yerel ayar─▒n AM veya PM (PM) de─čerine e┼čde─čer

B├Âylece yani d├Ân├╝┼čt├╝rme strptime gerek string i├žin

 >>> dates = []
>>> dates.append('Jun 1 2005  1:33PM')
>>> dates.append('Aug 28 1999 12:00AM')
>>> from datetime import datetime
>>> for d in dates:
...     date = datetime.strptime(d, '%b %d %Y %I:%M%p')
...     print type(date)
...     print date
... 
 

Çıktı

 <type 'datetime.datetime'>
2005-06-01 13:33:00
<type 'datetime.datetime'>
1999-08-28 00:00:00
 

Farkl─▒ tarih formatlar─▒n─▒z varsa, panda veya dateutil.parse kullanabilirsiniz.

 >>> import dateutil
>>> dates = []
>>> dates.append('12 1 2017')
>>> dates.append('1 1 2017')
>>> dates.append('1 12 2017')
>>> dates.append('June 1 2017 1:30:00AM')
>>> [parser.parse(x) for x in dates]
 

Çıktı

 [datetime.datetime(2017, 12, 1, 0, 0), datetime.datetime(2017, 1, 1, 0, 0), datetime.datetime(2017, 1, 12, 0, 0), datetime.datetime(2017, 6, 1, 1, 30)]
 

47







├ço─ču zaman damgas─▒n─▒n ├╝st├╝ kapal─▒ bir zaman dilimine sahiptir. Kodunuzun her saat diliminde ├žal─▒┼čaca─č─▒ndan emin olmak i├žin, UTC'yi dahili olarak kullanmal─▒ ve yabanc─▒ bir nesne sisteme her girdi─činde bir saat dilimi eklemelisiniz.

Python 3.2+:

 >>> datetime.datetime.strptime(
...     "March 5, 2014, 20:13:50", "%B %d, %Y, %H:%M:%S"
... ).replace(tzinfo=datetime.timezone(datetime.timedelta(hours=-3)))
 

31







Dizeleri bi├žimlendirilmi┼č tarihleri, datetime.date nesnelerine d├Ân├╝┼čt├╝rmek i├žin Panda'lar─▒ kullanan iki ├ž├Âz├╝m.

 import pandas as pd

dates = ['2015-12-25', '2015-12-26']

# 1) Use a list comprehension.
>>> [d.date() for d in pd.to_datetime(dates)]
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]

# 2) Convert the dates to a DatetimeIndex and extract the python dates.
>>> pd.DatetimeIndex(dates).date.tolist()
[datetime.date(2015, 12, 25), datetime.date(2015, 12, 26)]
 

zamanlamalar

 dates = pd.DatetimeIndex(start='2000-1-1', end='2010-1-1', freq='d').date.tolist()

>>> %timeit [d.date() for d in pd.to_datetime(dates)]
# 100 loops, best of 3: 3.11 ms per loop

>>> %timeit pd.DatetimeIndex(dates).date.tolist()
# 100 loops, best of 3: 6.85 ms per loop
 

Ve OP'nin orijinal tarih-zaman ├Ârneklerini nas─▒l d├Ân├╝┼čt├╝rece─činizi i┼čte burada bulabilirsiniz:

 datetimes = ['Jun 1 2005  1:33PM', 'Aug 28 1999 12:00AM']

>>> pd.to_datetime(datetimes).to_pydatetime().tolist()
[datetime.datetime(2005, 6, 1, 13, 33), 
 datetime.datetime(1999, 8, 28, 0, 0)]
 

Kullanarak dizgilerden Pandas Timestamps'a d├Ân├╝┼čt├╝rmek i├žin pek ├žok se├ženek var to_datetime , bu y├╝zden ├Âzel bir ┼čeye ihtiyac─▒n─▒z olursa dok├╝man─▒ kontrol edin .

Ayn─▒ ┼čekilde, Zaman damgalar─▒n─▒n , bunlara ek olarak eri┼čilebilecek bir├žok ├Âzelli─či ve y├Ântemi vard─▒r. .date


27







Python'da> = 3.7.0,

d├Ân├╝┼čt├╝rme i├žin tarih saat nesneye YYYY-AA-GG dize , datetime.fromisoformat kullan─▒labilir.

 >>> from datetime import datetime

>>> date_string = "2012-12-12 10:10:10"
>>> print (datetime.fromisoformat(date_string))
>>> 2012-12-12 10:10:10
 

26







Burada belirtilmeyen ve faydal─▒ olan bir ┼čey: g├╝ne bir sonek eklemek. Son eki mant─▒─č─▒n─▒ ay─▒rd─▒m, b├Âylece sadece tarihler de─čil istedi─činiz herhangi bir say─▒ i├žin kullanabilirsiniz.

 import time

def num_suffix(n):
    '''
    Returns the suffix for any given int
    '''
    suf = ('th','st', 'nd', 'rd')
    n = abs(n) # wise guy
    tens = int(str(n)[-2:])
    units = n % 10
    if tens > 10 and tens < 20:
        return suf[0] # teens with 'th'
    elif units <= 3:
        return suf[units]
    else:
        return suf[0] # 'th'

def day_suffix(t):
    '''
    Returns the suffix of the given struct_time day
    '''
    return num_suffix(t.tm_mday)

# Examples
print num_suffix(123)
print num_suffix(3431)
print num_suffix(1234)
print ''
print day_suffix(time.strptime("1 Dec 00", "%d %b %y"))
print day_suffix(time.strptime("2 Nov 01", "%d %b %y"))
print day_suffix(time.strptime("3 Oct 02", "%d %b %y"))
print day_suffix(time.strptime("4 Sep 03", "%d %b %y"))
print day_suffix(time.strptime("13 Nov 90", "%d %b %y"))
print day_suffix(time.strptime("14 Oct 10", "%d %b %y"))ÔÇőÔÇőÔÇőÔÇőÔÇőÔÇőÔÇő
 

23







┼×ahsen parser bu sorunun ikinci cevab─▒ olan ve g├╝zel olan mod├╝l├╝ kullanan ├ž├Âz├╝m├╝ seviyorum, ├ž├╝nk├╝ ├žal─▒┼čmas─▒ i├žin herhangi bir string haz─▒rlay─▒c─▒ olu┼čturmak zorunda de─čilsiniz. AMA , bir dezavantaj─▒, kabul edilen cevaptan % 90 daha yava┼č olmas─▒d─▒r strptime .

 from dateutil import parser
from datetime import datetime
import timeit

def dt():
    dt = parser.parse("Jun 1 2005  1:33PM")
def strptime():
    datetime_object = datetime.strptime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')

print(timeit.timeit(stmt=dt, number=10**5))
print(timeit.timeit(stmt=strptime, number=10**5))
>10.70296801342902
>1.3627995655316933
 

Bunu tekrar tekrar milyonlarca kez yapmad─▒─č─▒n─▒z s├╝rece , parser y├Ântemin daha uygun oldu─čunu ve zaman formatlar─▒n─▒n ├žo─čunu otomatik olarak halledece─čini d├╝┼č├╝n├╝yorum .


22







Django Timezone, datetime nesnesi ├Ârne─činin fark─▒nda.

 import datetime
from django.utils.timezone import get_current_timezone
tz = get_current_timezone()

format = '%b %d %Y %I:%M%p'
date_object = datetime.datetime.strptime('Jun 1 2005  1:33PM', format)
date_obj = tz.localize(date_object)
 

Bu d├Ân├╝┼č├╝m, a┼ča─č─▒daki durumlarda Django ve Python i├žin ├žok ├Ânemlidir USE_TZ = True :

 RuntimeWarning: DateTimeField MyModel.created received a naive datetime (2016-03-04 00:00:00) while time zone support is active.
 

14







 In [34]: import datetime

In [35]: _now = datetime.datetime.now()

In [36]: _now
Out[36]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [37]: print _now
2016-01-19 09:47:00.432000

In [38]: _parsed = datetime.datetime.strptime(str(_now),"%Y-%m-%d %H:%M:%S.%f")

In [39]: _parsed
Out[39]: datetime.datetime(2016, 1, 19, 9, 47, 0, 432000)

In [40]: assert _now == _parsed
 

13







Gibi k├╝├ž├╝k bir yard─▒mc─▒ program i┼člevi olu┼čturun:

 def date(datestr="", format="%Y-%m-%d"):
    from datetime import datetime
    if not datestr:
        return datetime.today().date()
    return datetime.strptime(datestr, format).date()
 

Bu yeterince ├žok y├Ânl├╝.

  • Herhangi bir arg├╝man ge├žemezseniz, bug├╝n├╝n tarihine d├Ânecektir.
  • Ge├žersiz k─▒labilece─činiz varsay─▒lan bir tarih bi├žimi vard─▒r.
  • Bir tarih saatini d├Ând├╝rmek i├žin kolayca de─či┼čtirebilirsiniz.

10







ok , tarihler ve saatler i├žin bir├žok yararl─▒ i┼člev sunar. Bu kod par├žas─▒, soruya bir cevap sa─člar ve okun, tarihlerin kolayca bi├žimlendirilebildi─čini ve di─čer yerler i├žin bilgileri g├Âr├╝nt├╝leyebildi─čini g├Âsterir.

 >>> import arrow
>>> dateStrings = [ 'Jun 1  2005 1:33PM', 'Aug 28 1999 12:00AM' ]
>>> for dateString in dateStrings:
...     dateString
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').datetime
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').format('ddd, Do MMM YYYY HH:mm')
...     arrow.get(dateString.replace('  ',' '), 'MMM D YYYY H:mmA').humanize(locale='de')
...
'Jun 1  2005 1:33PM'
datetime.datetime(2005, 6, 1, 13, 33, tzinfo=tzutc())
'Wed, 1st Jun 2005 13:33'
'vor 11 Jahren'
'Aug 28 1999 12:00AM'
datetime.datetime(1999, 8, 28, 0, 0, tzinfo=tzutc())
'Sat, 28th Aug 1999 00:00'
'vor 17 Jahren'
 

Daha fazla bilgi i├žin http://arrow.readthedocs.io/en/latest/ adresine bak─▒n .


8







Dizeyi tarih saatine ve saat dilimine d├Ân├╝┼čt├╝rmek i├žin yararl─▒ olur

 def convert_string_to_time(date_string, timezone):
    from datetime import datetime
    import pytz
    date_time_obj = datetime.strptime(date_string[:26], '%Y-%m-%d %H:%M:%S.%f')
    date_time_obj_timezone = pytz.timezone(timezone).localize(date_time_obj)

    return date_time_obj_timezone

date = '2018-08-14 13:09:24.543953+00:00'
TIME_ZONE = 'UTC'
date_time_obj_timezone = convert_string_to_time(date, TIME_ZONE)
 

7







Easy_date i┼člevini kolayla┼čt─▒rmak i├žin kullanabilirsiniz :

 import date_converter
converted_date = date_converter.string_to_datetime('Jun 1 2005  1:33PM', '%b %d %Y %I:%M%p')
 

5







Yaln─▒zca tarih format─▒ istiyorsan─▒z, a┼ča─č─▒daki gibi kendi alanlar─▒n─▒z─▒ ileterek manuel olarak d├Ân├╝┼čt├╝rebilirsiniz:

 >>> import datetime
>>> date = datetime.date(int('2017'),int('12'),int('21'))
>>> date
datetime.date(2017, 12, 21)
>>> type(date)
<type 'datetime.date'>
 

B├Âl├╝nm├╝┼č dize de─čerlerinizi ┼čunun gibi tarih t├╝r├╝ne d├Ân├╝┼čt├╝rmek i├žin aktarabilirsiniz:

 selected_month_rec = '2017-09-01'
date_formate = datetime.date(int(selected_month_rec.split('-')[0]),int(selected_month_rec.split('-')[1]),int(selected_month_rec.split('-')[2]))
 

Elde edilen de─čeri tarih bi├žiminde al─▒rs─▒n─▒z.


3







 emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv")
emp.info()
 

"Ba┼člang─▒├ž ÔÇőÔÇőTarihi Zaman─▒" S├╝tununu ve "Son Giri┼č Zaman─▒" n─▒ g├Âsterir, her ikisi de veri ├žer├ževesinde "object = strings" dir

 <class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
First Name           933 non-null object
Gender               855 non-null object
 
 Start Date           1000 non-null object

Last Login Time      1000 non-null object
 
 Salary               1000 non-null int64
Bonus %              1000 non-null float64
Senior Management    933 non-null object
Team                 957 non-null object
dtypes: float64(1), int64(1), object(6)
memory usage: 62.6+ KB
 

Bahsedilen parse_dates se├žene─či kullanarak read_csv , datetime dizenizi pandalar datetime bi├žimine d├Ân├╝┼čt├╝rebilirsiniz.

 emp = pd.read_csv("C:\\py\\programs\\pandas_2\\pandas\\employees.csv", parse_dates=["Start Date", "Last Login Time"])
emp.info()


<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1000 entries, 0 to 999
Data columns (total 8 columns):
First Name           933 non-null object
Gender               855 non-null object
 
 Start Date           1000 non-null datetime64[ns]
Last Login Time      1000 non-null datetime64[ns]
 
 Salary               1000 non-null int64
Bonus %              1000 non-null float64
Senior Management    933 non-null object
Team                 957 non-null object
dtypes: datetime64[ns](2), float64(1), int64(1), object(4)
memory usage: 62.6+ KB
 

0







Cevab─▒m─▒ g├Âr .

Ger├žek d├╝nya verilerinde bu ger├žek bir sorundur: ├žo─ču zaman tek bir veri k├╝mesinde serbest├že kar─▒┼čt─▒r─▒lan ├žoklu, uyu┼čmayan, eksik, tutars─▒z ve ├žok dilli / b├Âlge tarih bi├žimleri. ├ťretim kodunun ba┼čar─▒s─▒z olmas─▒ do─čru de─čil, bir tilki gibi istisnas─▒z mutlu olsun.

Denememiz gerekir ... fmt1, fmt2, ..., fmtn ├žoklu tarih bi├žimlerini yakalay─▒n ve fmtn komutunu uygulay─▒n ve uyu┼čmayan herkes i├žin istisnalar─▒ (dan strptime() ) istisnalar─▒ (├Âzellikle ) bast─▒r─▒n / i┼čleyin ..catch c├╝mleleri). G├Ânderen benim ├ž├Âz├╝m

 def try_strptime(s, fmts=['%d-%b-%y','%m/%d/%Y']):
    for fmt in fmts:
        try:
            return datetime.strptime(s, fmt)
        except:
            continue

    return None # or reraise the ValueError if no format matched, if you prefer
 

-1


2017-12-18