ISO 8601 형식의 날짜를 어떻게 구문 분석합니까?
RFC 3339 문자열 "2008-09-03T20:56:35.450686Z"
을 Python datetime
유형 과 같이 구문 분석해야 합니다.
strptime
파이썬 표준 라이브러리에서 찾았 지만 그다지 편리하지 않습니다.
이를 수행하는 가장 좋은 방법은 무엇입니까?
파이썬 dateutil 패키지는 문제의 하나처럼뿐만 아니라 RFC 3339 날짜 문자열을 구문 분석 할 수 있지만, 다른 ISO 8601 없는 UTC와 사람 오프셋 RFC 3339을 준수하지 않는 날짜와 시간 문자열 (예, 또는 사람이 표현하는 날짜 만).
>>> import dateutil.parser
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686Z') # RFC 3339 format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
>>> dateutil.parser.parse('2008-09-03T20:56:35.450686') # ISO 8601 extended format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903T205635.450686') # ISO 8601 basic format
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
>>> dateutil.parser.parse('20080903') # ISO 8601 basic format, date only
datetime.datetime(2008, 9, 3, 0, 0)
dateutil.parser
는 의도적으로 해키 된다는 점에 유의하십시오 . 형식을 추측하려고 시도하고 모호한 경우에는 불가피한 가정 (손으로 만 사용자 정의 가능)을 만듭니다. 따라서 알 수없는 형식의 입력을 구문 분석해야하고 가끔 잘못 읽는 것을 허용 할 수있는 경우에만 사용하십시오. ( ivan_pozdeev에게 감사 드립니다 )
Pypi 이름은 python-dateutil
없습니다, dateutil
(감사 code3monk3y ) :
pip install python-dateutil
Python 3.7을 사용하는 경우에 대한 답변을 살펴 보십시오 datetime.datetime.fromisoformat
.
Python 2.6+ 및 Py3K에서 % f 문자는 마이크로 초를 포착합니다.
>>> datetime.datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
여기에서 문제보기
여기에 몇 가지 답변을 사용 하여 질문에 표시된 것과 같은 시간대로 RFC 3339 또는 ISO 8601 날짜 시간을 구문 분석 하는 것이 좋습니다 . datetime.datetime.strptime
2008-09-03T20:56:35.450686Z
이것은 나쁜 생각입니다.
0 이외의 UTC 오프셋 지원을 포함하여 전체 RFC 3339 형식을 지원한다고 가정하면 이러한 답변이 제안하는 코드가 작동하지 않습니다. 실제로 RFC 3339 구문 분석 이 불가능 하기 때문에 작동 하지 않습니다strptime
. Python의 datetime 모듈에서 사용하는 형식 문자열은 RFC 3339 구문을 설명 할 수 없습니다.
문제는 UTC 오프셋입니다. RFC 3339 인터넷 날짜 / 시간 형식은 모든 날짜와 시간은 UTC 오프셋을 포함, 그 오프셋이 될 수 있어야합니다 Z
(짧은 "줄루 시간"에 대한) 또는에서 +HH:MM
또는 -HH:MM
형식, 같은 +05:00
나 -10:30
.
따라서 다음은 모두 유효한 RFC 3339 날짜 시간입니다.
2008-09-03T20:56:35.450686Z
2008-09-03T20:56:35.450686+05:00
2008-09-03T20:56:35.450686-10:30
아아, 형식 문자열에 사용 strptime
하고 strftime
어떤 지침이 없다는 RFC 3339 형식의 UTC 오프셋에 해당합니다. 그들이 지원하는 지시문의 전체 목록은 https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior 에서 찾을 수 있으며 목록에 포함 된 유일한 UTC 오프셋 지시문은 %z
다음과 같습니다.
%지
+ HHMM 또는 -HHMM 형식의 UTC 오프셋 (객체가 순진한 경우 빈 문자열).
예 : (비어 있음), +0000, -0400, +1030
이것은 RFC 3339 오프셋의 형식과 일치하지 않으며 실제로 %z
형식 문자열에서 사용 하고 RFC 3339 날짜를 구문 분석 하려고하면 실패합니다.
>>> from datetime import datetime
>>> datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.4/_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2008-09-03T20:56:35.450686Z' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
>>> datetime.strptime("2008-09-03T20:56:35.450686+05:00", "%Y-%m-%dT%H:%M:%S.%f%z")
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.4/_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2008-09-03T20:56:35.450686+05:00' does not match format '%Y-%m-%dT%H:%M:%S.%f%z'
(사실 위의 내용은 Python 3에서 볼 수있는 것입니다. Python 2에서는 더 간단한 이유 때문에 실패합니다. 즉, Python 2 strptime
에서는 %z
지시문을 전혀 구현하지 않습니다 .)
질문 질문자의 예제 datetime 문자열 과 일치하는 형식 문자열에 strptime
리터럴을 포함하여이 문제를 해결 하도록 권장하는 여러 답변이 있습니다 (그리고이를 삭제 하여 시간대가없는 객체를 생성 함 ).Z
Z
datetime
>>> datetime.strptime("2008-09-03T20:56:35.450686Z", "%Y-%m-%dT%H:%M:%S.%fZ")
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
이렇게하면 원래 datetime 문자열에 포함 된 시간대 정보가 삭제되므로이 결과도 올바른 것으로 간주해야하는지 여부는 의심 스럽습니다. 그러나 더 중요한 것은이 접근 방식이 특정 UTC 오프셋을 형식 문자열로 하드 코딩하는 것을 포함하기 때문에 다른 UTC 오프셋을 사용하여 RFC 3339 날짜 시간을 구문 분석하려고하는 순간 질식합니다.
>>> datetime.strptime("2008-09-03T20:56:35.450686+05:00", "%Y-%m-%dT%H:%M:%S.%fZ")
Traceback (most recent call last):
File "", line 1, in
File "/usr/lib/python3.4/_strptime.py", line 500, in _strptime_datetime
tt, fraction = _strptime(data_string, format)
File "/usr/lib/python3.4/_strptime.py", line 337, in _strptime
(data_string, format))
ValueError: time data '2008-09-03T20:56:35.450686+05:00' does not match format '%Y-%m-%dT%H:%M:%S.%fZ'
Zulu 시간에서 RFC 3339 날짜 시간 만 지원해야하고 다른 시간대 오프셋이있는 날짜 시간은 지원 하지 않는 것이 확실 하지 않은 경우 strptime
. 대신 여기 답변에 설명 된 다른 많은 접근 방식 중 하나를 사용하십시오.
Python 3.7 이상의 새로운 기능
datetime
표준 라이브러리 반전하는 기능을 도입 datetime.isoformat()
.
classmethod
datetime.fromisoformat(date_string)
:및 에서 내 보낸 형식 중 하나에서에
datetime
해당 하는를 반환합니다 .date_string
date.isoformat()
datetime.isoformat()
특히이 함수는 다음 형식의 문자열을 지원합니다.
YYYY-MM-DD[*HH[:MM[:SS[.mmm[mmm]]]][+HH:MM[:SS[.ffffff]]]]
여기서
*
하나의 문자를 일치시킬 수 있습니다.주의 : 이것은 임의의 ISO 8601 문자열 구문 분석을 지원하지 않습니다. 이는의 역 연산만을위한 것입니다
datetime.isoformat()
.
사용 예 :
from datetime import datetime
date = datetime.fromisoformat('2017-01-01T12:30:59.000000')
iso8601 모듈을 사용해보십시오 . 정확히 이것을합니다.
python.org 위키 의 WorkingWithTime 페이지에 언급 된 몇 가지 다른 옵션이 있습니다 .
다시 가져 오기, 날짜 시간 s = "2008-09-03T20 : 56 : 35.450686Z" d = datetime.datetime (* map (int, re.split ( '[^ \ d]', s) [:-1]))
당신이 얻는 정확한 오류는 무엇입니까? 다음과 같은가요?
>>> datetime.datetime.strptime("2008-08-12T12:20:30.656234Z", "%Y-%m-%dT%H:%M:%S.Z")
ValueError: time data did not match format: data=2008-08-12T12:20:30.656234Z fmt=%Y-%m-%dT%H:%M:%S.Z
그렇다면 입력 문자열을 "."로 분할 한 다음 얻은 날짜 시간에 마이크로 초를 추가 할 수 있습니다.
이 시도:
>>> def gt(dt_str):
dt, _, us= dt_str.partition(".")
dt= datetime.datetime.strptime(dt, "%Y-%m-%dT%H:%M:%S")
us= int(us.rstrip("Z"), 10)
return dt + datetime.timedelta(microseconds=us)
>>> gt("2008-08-12T12:20:30.656234Z")
datetime.datetime(2008, 8, 12, 12, 20, 30, 656234)
Python 3.7부터 strptime은 UTC 오프셋 ( source ) 에서 콜론 구분 기호를 지원합니다 . 따라서 다음을 사용할 수 있습니다.
import datetime
datetime.datetime.strptime('2018-01-31T09:24:31.488670+00:00', '%Y-%m-%dT%H:%M:%S.%f%z')
요즘 Arrow 는 타사 솔루션으로도 사용할 수 있습니다.
>>> import arrow
>>> date = arrow.get("2008-09-03T20:56:35.450686Z")
>>> date.datetime
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=tzutc())
python-dateutil
모듈을 사용하십시오 .
>>> import dateutil.parser as dp
>>> t = '1984-06-02T19:05:00.000Z'
>>> parsed_t = dp.parse(t)
>>> print(parsed_t)
datetime.datetime(1984, 6, 2, 19, 5, tzinfo=tzutc())
dateutil을 사용하지 않으려면 다음 기능을 시도해 볼 수 있습니다.
def from_utc(utcTime,fmt="%Y-%m-%dT%H:%M:%S.%fZ"):
"""
Convert UTC time string to time.struct_time
"""
# change datetime.datetime to time, return time.struct_time type
return datetime.datetime.strptime(utcTime, fmt)
테스트:
from_utc("2007-03-04T21:08:12.123Z")
결과:
datetime.datetime(2007, 3, 4, 21, 8, 12, 123000)
Django로 작업하는 경우 시간대를 포함하여 ISO 형식과 유사한 여러 형식을 허용하는 dateparse 모듈 을 제공합니다 .
Django를 사용하지 않고 여기에 언급 된 다른 라이브러리 중 하나를 사용하고 싶지 않다면 dateparse 에 대한 Django 소스 코드를 프로젝트 에 적용 할 수 있습니다.
ISO 8601 타임 스탬프를 구문 분석하는 가장 빠른 방법 인 ciso8601 을 발견 했습니다 . 이름에서 알 수 있듯이 C로 구현됩니다.
import ciso8601
ciso8601.parse_datetime('2014-01-09T21:48:00.921000+05:30')
GitHub의 리포 README는 다른 답변에 나와있는 다른 모든 라이브러리에 비해 자신의> 10 배의 속도 향상을 보여줍니다.
내 개인 프로젝트에는 ISO 8601 구문 분석이 많이 포함되었습니다. 통화를 전환하고 10 배 더 빠르게 진행할 수있어 좋았습니다. :)
편집 : 이후 ciso8601의 관리자가되었습니다. 이제 그 어느 때보 다 빨라졌습니다!
저는 iso8601 utils의 저자입니다. GitHub 또는 PyPI 에서 찾을 수 있습니다 . 예제를 구문 분석하는 방법은 다음과 같습니다.
>>> from iso8601utils import parsers
>>> parsers.datetime('2008-09-03T20:56:35.450686Z')
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686)
datetime.datetime
타사 모듈을 설치하지 않고 지원되는 모든 Python 버전에서 ISO 8601과 유사한 날짜 문자열을 UNIX 타임 스탬프 또는 객체 로 변환하는 간단한 방법 중 하나 는 SQLite 의 날짜 파서 를 사용하는 것 입니다.
#!/usr/bin/env python
from __future__ import with_statement, division, print_function
import sqlite3
import datetime
testtimes = [
"2016-08-25T16:01:26.123456Z",
"2016-08-25T16:01:29",
]
db = sqlite3.connect(":memory:")
c = db.cursor()
for timestring in testtimes:
c.execute("SELECT strftime('%s', ?)", (timestring,))
converted = c.fetchone()[0]
print("%s is %s after epoch" % (timestring, converted))
dt = datetime.datetime.fromtimestamp(int(converted))
print("datetime is %s" % dt)
산출:
2016-08-25T16:01:26.123456Z is 1472140886 after epoch
datetime is 2016-08-25 12:01:26
2016-08-25T16:01:29 is 1472140889 after epoch
datetime is 2016-08-25 12:01:29
ISO 8601 표준에 대한 파서를 코딩하고 GitHub : https://github.com/boxed/iso8601 에 넣었습니다 . 이 구현은 기간, 간격, 주기적 간격 및 Python의 datetime 모듈의 지원되는 날짜 범위를 벗어난 날짜를 제외하고 사양의 모든 것을 지원합니다.
테스트가 포함되어 있습니다! :피
이것은 Python 3.2의 stdlib에서 작동합니다 (모든 타임 스탬프가 UTC라고 가정).
from datetime import datetime, timezone, timedelta
datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S.%fZ").replace(
tzinfo=timezone(timedelta(0)))
예를 들면
>>> datetime.utcnow().replace(tzinfo=timezone(timedelta(0)))
... datetime.datetime(2015, 3, 11, 6, 2, 47, 879129, tzinfo=datetime.timezone.utc)
Django의 parse_datetime () 함수는 UTC 오프셋이있는 날짜를 지원합니다.
parse_datetime('2016-08-09T15:12:03.65478Z') =
datetime.datetime(2016, 8, 9, 15, 12, 3, 654780, tzinfo=<UTC>)
따라서 전체 프로젝트 내의 필드에서 ISO 8601 날짜를 구문 분석하는 데 사용할 수 있습니다.
from django.utils import formats
from django.forms.fields import DateTimeField
from django.utils.dateparse import parse_datetime
class DateTimeFieldFixed(DateTimeField):
def strptime(self, value, format):
if format == 'iso-8601':
return parse_datetime(value)
return super().strptime(value, format)
DateTimeField.strptime = DateTimeFieldFixed.strptime
formats.ISO_INPUT_FORMATS['DATETIME_INPUT_FORMATS'].insert(0, 'iso-8601')
ISO 8601은 선택적인 콜론과 대시의 다양한 변형을 허용하기 때문에 기본적으로 CCYY-MM-DDThh:mm:ss[Z|(+|-)hh:mm]
. strptime을 사용하려면 먼저 이러한 변형을 제거해야합니다.
목표는 utc datetime 객체를 생성하는 것입니다.
다음과 같은 Z 접미사를 사용하여 UTC에서 작동하는 기본 케이스를 원하는 경우
2016-06-29T19:36:29.3453Z
:
datetime.datetime.strptime(timestamp.translate(None, ':-'), "%Y%m%dT%H%M%S.%fZ")
다음과 같이 시간대 오프셋을 처리
2016-06-29T19:36:29.3453-0400
하거나
2008-09-03T20:56:35.450686+05:00
사용하려면 다음을 사용하십시오. 이들은 모든 변형을 변수 구분 기호가없는 것으로 변환합니다. 예
20080903T205635.450686+0500
를 들어보다 일관적이고 파싱하기 쉽습니다.
import re
# this regex removes all colons and all
# dashes EXCEPT for the dash indicating + or - utc offset for the timezone
conformed_timestamp = re.sub(r"[:]|([-](?!((\d{2}[:]\d{2})|(\d{4}))$))", '', timestamp)
datetime.datetime.strptime(conformed_timestamp, "%Y%m%dT%H%M%S.%f%z" )
시스템이
%z
strptime 지시문을 지원하지 않는 경우
(예 :)
(UTC) ValueError: 'z' is a bad directive in format '%Y%m%dT%H%M%S.%f%z'
에서 시간을 수동으로 오프셋해야합니다
Z
. 참고
%z
는 시스템 / python 빌드 유형 (예 : Jython, Cython 등)에 따라 달라지는 c 라이브러리 지원에 따라 Python 버전 <3의 시스템에서 작동하지 않을 수 있습니다.
import re
import datetime
# this regex removes all colons and all
# dashes EXCEPT for the dash indicating + or - utc offset for the timezone
conformed_timestamp = re.sub(r"[:]|([-](?!((\d{2}[:]\d{2})|(\d{4}))$))", '', timestamp)
# split on the offset to remove it. use a capture group to keep the delimiter
split_timestamp = re.split(r"[+|-]",conformed_timestamp)
main_timestamp = split_timestamp[0]
if len(split_timestamp) == 3:
sign = split_timestamp[1]
offset = split_timestamp[2]
else:
sign = None
offset = None
# generate the datetime object without the offset at UTC time
output_datetime = datetime.datetime.strptime(main_timestamp +"Z", "%Y%m%dT%H%M%S.%fZ" )
if offset:
# create timedelta based on offset
offset_delta = datetime.timedelta(hours=int(sign+offset[:-2]), minutes=int(sign+offset[-2:]))
# offset datetime with timedelta
output_datetime = output_datetime + offset_delta
2.X 표준 라이브러리에서 작동하는 것을 보려면 다음을 시도하십시오.
calendar.timegm(time.strptime(date.split(".")[0]+"UTC", "%Y-%m-%dT%H:%M:%S%Z"))
calendar.timegm은 time.mktime의 누락 된 gm 버전입니다.
python-dateutil은 유효하지 않은 날짜 문자열을 구문 분석하는 경우 예외를 발생 시키므로 예외를 포착 할 수 있습니다.
from dateutil import parser
ds = '2012-60-31'
try:
dt = parser.parse(ds)
except ValueError, e:
print '"%s" is an invalid date' % ds
Nowadays there's Maya: Datetimes for Humans™, from the author of the popular Requests: HTTP for Humans™ package:
>>> import maya
>>> str = '2008-09-03T20:56:35.450686Z'
>>> maya.MayaDT.from_rfc3339(str).datetime()
datetime.datetime(2008, 9, 3, 20, 56, 35, 450686, tzinfo=<UTC>)
Thanks to great Mark Amery's answer I devised function to account for all possible ISO formats of datetime:
class FixedOffset(tzinfo):
"""Fixed offset in minutes: `time = utc_time + utc_offset`."""
def __init__(self, offset):
self.__offset = timedelta(minutes=offset)
hours, minutes = divmod(offset, 60)
#NOTE: the last part is to remind about deprecated POSIX GMT+h timezones
# that have the opposite sign in the name;
# the corresponding numeric value is not used e.g., no minutes
self.__name = '<%+03d%02d>%+d' % (hours, minutes, -hours)
def utcoffset(self, dt=None):
return self.__offset
def tzname(self, dt=None):
return self.__name
def dst(self, dt=None):
return timedelta(0)
def __repr__(self):
return 'FixedOffset(%d)' % (self.utcoffset().total_seconds() / 60)
def __getinitargs__(self):
return (self.__offset.total_seconds()/60,)
def parse_isoformat_datetime(isodatetime):
try:
return datetime.strptime(isodatetime, '%Y-%m-%dT%H:%M:%S.%f')
except ValueError:
pass
try:
return datetime.strptime(isodatetime, '%Y-%m-%dT%H:%M:%S')
except ValueError:
pass
pat = r'(.*?[+-]\d{2}):(\d{2})'
temp = re.sub(pat, r'\1\2', isodatetime)
naive_date_str = temp[:-5]
offset_str = temp[-5:]
naive_dt = datetime.strptime(naive_date_str, '%Y-%m-%dT%H:%M:%S.%f')
offset = int(offset_str[-4:-2])*60 + int(offset_str[-2:])
if offset_str[0] == "-":
offset = -offset
return naive_dt.replace(tzinfo=FixedOffset(offset))
def parseISO8601DateTime(datetimeStr):
import time
from datetime import datetime, timedelta
def log_date_string(when):
gmt = time.gmtime(when)
if time.daylight and gmt[8]:
tz = time.altzone
else:
tz = time.timezone
if tz > 0:
neg = 1
else:
neg = 0
tz = -tz
h, rem = divmod(tz, 3600)
m, rem = divmod(rem, 60)
if neg:
offset = '-%02d%02d' % (h, m)
else:
offset = '+%02d%02d' % (h, m)
return time.strftime('%d/%b/%Y:%H:%M:%S ', gmt) + offset
dt = datetime.strptime(datetimeStr, '%Y-%m-%dT%H:%M:%S.%fZ')
timestamp = dt.timestamp()
return dt + timedelta(hours=dt.hour-time.gmtime(timestamp).tm_hour)
Note that we should look if the string doesn't ends with Z
, we could parse using %z
.
Initially I tried with:
from operator import neg, pos
from time import strptime, mktime
from datetime import datetime, tzinfo, timedelta
class MyUTCOffsetTimezone(tzinfo):
@staticmethod
def with_offset(offset_no_signal, signal): # type: (str, str) -> MyUTCOffsetTimezone
return MyUTCOffsetTimezone((pos if signal == '+' else neg)(
(datetime.strptime(offset_no_signal, '%H:%M') - datetime(1900, 1, 1))
.total_seconds()))
def __init__(self, offset, name=None):
self.offset = timedelta(seconds=offset)
self.name = name or self.__class__.__name__
def utcoffset(self, dt):
return self.offset
def tzname(self, dt):
return self.name
def dst(self, dt):
return timedelta(0)
def to_datetime_tz(dt): # type: (str) -> datetime
fmt = '%Y-%m-%dT%H:%M:%S.%f'
if dt[-6] in frozenset(('+', '-')):
dt, sign, offset = strptime(dt[:-6], fmt), dt[-6], dt[-5:]
return datetime.fromtimestamp(mktime(dt),
tz=MyUTCOffsetTimezone.with_offset(offset, sign))
elif dt[-1] == 'Z':
return datetime.strptime(dt, fmt + 'Z')
return datetime.strptime(dt, fmt)
But that didn't work on negative timezones. This however I got working fine, in Python 3.7.3:
from datetime import datetime
def to_datetime_tz(dt): # type: (str) -> datetime
fmt = '%Y-%m-%dT%H:%M:%S.%f'
if dt[-6] in frozenset(('+', '-')):
return datetime.strptime(dt, fmt + '%z')
elif dt[-1] == 'Z':
return datetime.strptime(dt, fmt + 'Z')
return datetime.strptime(dt, fmt)
Some tests, note that the out only differs by precision of microseconds. Got to 6 digits of precision on my machine, but YMMV:
for dt_in, dt_out in (
('2019-03-11T08:00:00.000Z', '2019-03-11T08:00:00'),
('2019-03-11T08:00:00.000+11:00', '2019-03-11T08:00:00+11:00'),
('2019-03-11T08:00:00.000-11:00', '2019-03-11T08:00:00-11:00')
):
isoformat = to_datetime_tz(dt_in).isoformat()
assert isoformat == dt_out, '{} != {}'.format(isoformat, dt_out)
An another way is to use specialized parser for ISO-8601 is to use isoparse function of dateutil parser:
from dateutil import parser
date = parser.isoparse("2008-09-03T20:56:35.450686+01:00")
print(date)
Output:
2008-09-03 20:56:35.450686+01:00
This function is also mentioned in the documentation for the standard Python function datetime.fromisoformat:
A more full-featured ISO 8601 parser, dateutil.parser.isoparse is available in the third-party package dateutil.
참고URL : https://stackoverflow.com/questions/127803/how-do-i-parse-an-iso-8601-formatted-date
'Nice programing' 카테고리의 다른 글
자바 스크립트 '바인딩'방법의 사용은 무엇입니까? (0) | 2020.10.03 |
---|---|
datetime을 날짜로 어떻게 변환합니까 (Python에서)? (0) | 2020.10.03 |
git diff가 호출기를 사용하지 못하도록하려면 어떻게해야합니까? (0) | 2020.10.03 |
함수 내부의 정적 변수에 해당하는 Python은 무엇입니까? (0) | 2020.10.03 |
SQL Server 테이블에 대한 INSERT 문을 자동 생성하는 가장 좋은 방법은 무엇입니까? (0) | 2020.10.03 |