Как datetime перевести в строку
Перейти к содержимому

Как datetime перевести в строку

  • автор:

Синтаксический анализ строк даты и времени в .NET

Чтобы анализировать строки для преобразования их в объекты DateTime, нужно указать, как значения даты и времени представлены в текстовом формате. Для различных языков и региональных параметров значения дня, месяца и года приводятся в разном порядке. В некоторых представлениях используются 24-часовые часы, а другие — «AM» и «PM». Для некоторых приложений требуется только дата. В других — только время. Тем не менее, другим необходимо указать дату и время. Методы преобразования строк в объекты DateTime позволяют предоставлять подробные сведения о требуемых форматах и элементах дат и времени, которые необходимы для вашего приложения. Есть три подзадачи для правильного преобразования текста в DateTime:

  1. Укажите требуемый формат текста, представляющего дату и время.
  2. Можно указать язык и региональные параметры для формата даты.
  3. Можно указать, как отсутствующие компоненты в текстовом представлении задаются в дате и времени.

Текущий объект DateTimeFormatInfo обеспечивает более точный контроль над тем, как текст должен интерпретироваться в качестве даты и времени. DateTimeFormatInfo Свойства разделителей даты и времени, имена месяцев, дней и эр, а также формат для обозначений AM и PM. Возвращаемое CultureInfoCultureInfo.CurrentCulture свойство имеет CultureInfo.DateTimeFormat свойство, представляющее текущий язык и региональные параметры. Если требуется задать определенные язык и региональные параметры или настраиваемые параметры, укажите для метода анализа параметр IFormatProvider. Для параметра IFormatProvider следует указать объект CultureInfo, представляющий язык и региональные параметры, или объект DateTimeFormatInfo.

Текст, представляющий дату или время, может пропустить некоторые сведения. Например, большинство пользователей будет считать, что дата «12 марта» относится к текущему году. Аналогичным образом, «март 2018 г.» представляет месяц март 2018 года. Текст, представляющий время, часто включает только часы, минуты и обозначение AM/PM. При помощи методов анализа эти отсутствующие данные обрабатываются с использованием обоснованных значений по умолчанию:

  • если указано только время, в части даты используется текущая дата;
  • если указана только дата, в части времени задается полночь;
  • если в дате не указан год, используется текущий год;
  • Если день месяца не указан, используется первый день месяца.

Если в строке есть дата, она должна включать месяц и день или год. Если указано время, значение должно содержать час и минуты или обозначение AM либо PM.

Чтобы переопределить эти значения по умолчанию, можно задать константу NoCurrentDateDefault. Если вы используете эту константу, для всех отсутствующих параметров года, месяца или дня устанавливается значение 1 . Это демонстрирует последний пример, в котором применяется Parse.

Помимо компонента даты и времени строковое представление даты и времени может содержать смещение, которое указывает, насколько время отличается от универсального синхронизированного времени (UTC). Например, строка «14/02/2007 5:32:00 -7: 00» определяет время, которое на семь часов меньше, чем UTC. Если в строковом представлении времени не задано смещение, то синтаксический анализ возвращает объект DateTime, свойство Kind которого имеет значение DateTimeKind.Unspecified. Если задано смещение, синтаксический анализ возвращает DateTime объект со своим Kind свойством, равным DateTimeKind.Local. Его значение также настраивается на локальный часовой пояс компьютера. Это поведение можно изменить, указав для метода анализа значение DateTimeStyles.

Поставщик формата также используется для интерпретации неоднозначных числовых дат. Неясно, какие компоненты даты представлены строкой «02/03/04» — это месяц, день и год. Такие компоненты интерпретируются согласно их порядку расположения в схожих форматах даты в поставщике формата.

Разбор

Ниже приведен пример использования метода DateTime.Parse для преобразования string в DateTime. В этом примере используются язык и региональные параметры, связанные с текущим потоком. CultureInfo Если связанный с текущим языком и региональными параметрами не может проанализировать входную строку, FormatException создается исключение.

Все примеры C# в этой статье выполняются в браузере. Нажмите кнопку Выполнить, чтобы просмотреть выходные данные. Вы можете поэкспериментировать, изменяя их значения.

Эти примеры для C# и Visual Basic см. в репозитории с документацией GitHub.

string dateInput = "Jan 1, 2009"; var parsedDate = DateTime.Parse(dateInput); Console.WriteLine(parsedDate); // Displays the following output on a system whose culture is en-US: // 1/1/2009 00:00:00 
Dim MyString As String = "Jan 1, 2009" Dim MyDateTime As DateTime = DateTime.Parse(MyString) Console.WriteLine(MyDateTime) ' Displays the following output on a system whose culture is en-US: ' 1/1/2009 00:00:00 

Кроме того, вы можете явно определить язык и региональные параметры, соглашения о форматировании для которых используются при анализе строки. Укажите один из стандартных объектов DateTimeFormatInfo, возвращенных свойством CultureInfo.DateTimeFormat. В приведенном ниже примере поставщик формата используется для анализа строки на немецком языке в DateTime. Для представления языка и региональных параметров de-DE создается CultureInfo. Этот объект CultureInfo обеспечивает успешный анализ определенной строки. Этот процесс исключает любой параметр в CurrentCulture параметре CurrentThread.

var cultureInfo = new CultureInfo("de-DE"); string dateString = "12 Juni 2008"; var dateTime = DateTime.Parse(dateString, cultureInfo); Console.WriteLine(dateTime); // The example displays the following output: // 6/12/2008 00:00:00 
Dim MyCultureInfo As New CultureInfo("de-DE") Dim MyString As String = "12 Juni 2008" Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo) Console.WriteLine(MyDateTime) ' The example displays the following output: ' 6/12/2008 00:00:00 

Однако можно использовать перегрузки метода для указания настраиваемых поставщиков Parse форматов. Метод Parse не поддерживает синтаксический анализ форматов, отличных от стандартных. Вместо этого используйте метод ParseExact для анализа даты и времени, выраженных в нестандартном формате.

В следующем примере перечисление DateTimeStyles используется для указания того, что текущие сведения о дате и времени не должны быть добавлены в DateTime поля без указания.

var cultureInfo = new CultureInfo("de-DE"); string dateString = "12 Juni 2008"; var dateTime = DateTime.Parse(dateString, cultureInfo, DateTimeStyles.NoCurrentDateDefault); Console.WriteLine(dateTime); // The example displays the following output if the current culture is en-US: // 6/12/2008 00:00:00 
Dim MyCultureInfo As New CultureInfo("de-DE") Dim MyString As String = "12 Juni 2008" Dim MyDateTime As DateTime = DateTime.Parse(MyString, MyCultureInfo, DateTimeStyles.NoCurrentDateDefault) Console.WriteLine(MyDateTime) ' The example displays the following output if the current culture is en-US: ' 6/12/2008 00:00:00 

ParseExact

В приведенном ниже примере в метод DateTime.ParseExact передается переназначенный для анализа строковый объект. Затем следует описатель формата, который сопровождается объектом CultureInfo. С помощью этого метода ParseExact можно анализировать только строки, соответствующие шаблону полной даты для языка и региональных параметров en-US .

var cultureInfo = new CultureInfo("en-US"); string[] dateStrings = < " Friday, April 10, 2009", "Friday, April 10, 2009" >; foreach (string dateString in dateStrings) < try < var dateTime = DateTime.ParseExact(dateString, "D", cultureInfo); Console.WriteLine(dateTime); >catch (FormatException) < Console.WriteLine("Unable to parse ''", dateString); > > // The example displays the following output: // Unable to parse ' Friday, April 10, 2009' // 4/10/2009 00:00:00 
Dim MyCultureInfo As New CultureInfo("en-US") Dim MyString() As String = For Each dateString As String In MyString Try Dim MyDateTime As DateTime = DateTime.ParseExact(dateString, "D", MyCultureInfo) Console.WriteLine(MyDateTime) Catch e As FormatException Console.WriteLine("Unable to parse ''", dateString) End Try Next ' The example displays the following output: ' Unable to parse ' Friday, April 10, 2009' ' 4/10/2009 00:00:00 

При каждой перегрузке методов Parse и ParseExact также используется параметр IFormatProvider, который предоставляет сведения о языке и региональных параметрах для форматирования строки. Объект IFormatProvider — это CultureInfo объект, представляющий стандартный язык и региональные параметры или DateTimeFormatInfo объект, возвращаемый свойством CultureInfo.DateTimeFormat . Кроме того, в методе ParseExact используется дополнительная строка или аргумент массива строк для определения одного или нескольких настраиваемых форматов даты и времени.

См. также

  • Анализ строк
  • Типы форматирования
  • Преобразование типов в .NET
  • Стандартные форматы даты и времени
  • Строки настраиваемых форматов даты и времени

Совместная работа с нами на GitHub

Источник этого содержимого можно найти на GitHub, где также можно создавать и просматривать проблемы и запросы на вытягивание. Дополнительные сведения см. в нашем руководстве для участников.

Как преобразовать DateTime в строку в Pandas (с примерами)

Вы можете использовать следующий базовый синтаксис для преобразования столбца из DateTime в строку в pandas:

df['column_name']. dt.strftime('%Y-%m-%d') 

В следующем примере показано, как использовать этот синтаксис на практике.

Пример: преобразование DateTime в строку в Pandas

Предположим, у нас есть следующий кадр данных pandas, который показывает продажи в каком-то магазине за четыре разных дня:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame df day sales 0 2021-01-01 1440 1 2021-01-05 1845 2 2021-01-06 2484 3 2021-01-09 2290 

Мы можем использовать функцию dtypes для просмотра типа данных каждого столбца в DataFrame:

#view data type of each column df.dtypes day datetime64[ns] sales int64 dtype: object 

Мы видим, что столбец «день» имеет класс DateTime .

Чтобы преобразовать «день» в строку, мы можем использовать следующий синтаксис:

#convert 'day' column to string df['day'] = df['day']. dt.strftime('%Y-%m-%d') #view updated DataFrame df day sales 0 2021-01-01 1440 1 2021-01-05 1845 2 2021-01-06 2484 3 2021-01-09 2290 

Мы можем снова использовать функцию dtypes , чтобы убедиться, что столбец «день» теперь является строкой:

#view data type of each column df.dtypes day object sales int64 dtype: object 

Примечание.Полную документацию по функции dt.strftime() можно найти здесь .

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные преобразования в Python:

javascript: перевести дату в строку в произвольном формате

в строку в формате YYYY-MM-DD средствами javascript (без использования сторонних библиотек, типа moment.js) конечно можно собрать строку из чисел «в лоб», но есть ли нормальное решение?

Отслеживать

задан 12 мар 2021 в 18:27

37.5k 4 4 золотых знака 28 28 серебряных знаков 77 77 бронзовых знаков

12 мар 2021 в 18:57

new Date().toISOString().split(‘T’)[0] подходит? (Но пояса не учитываются)

12 мар 2021 в 18:57

@Алексей Шиманский, ну в принципе это решение в лоб с перебором одной даты в другую через раскладывания ее на части, хотя наверное такой вариант тоже подойдет, но думал, что можно обойтись каким-то встроенным простым решением

Документация

Преобразование между массивами datetime, числами и текстом

Обзор

datetime лучший тип данных для представления моментов времени. datetime значения имеют гибкие форматы отображения и до точности наносекунды и могут составлять часовые пояса, летнее время и секунды прыжка. Однако, если вы работаете с кодом, созданным в MATLAB ® R2014a или ранее, или если вы совместно используете код с другими, которые используют такую версию, вы можете должны быть работать с датами и время, сохраненное в одном из этих трех форматов:

  • Строка даты — вектор символов.
Example: Thursday, August 23, 2012 9:45:44.946 AM
Example: [2012 8 23 9 45 44.946]
Example: 7.3510e+005

Строки даты, векторы и числа могут храниться как массивы значений. Сохраните несколько строк даты в массиве ячеек из символьных векторов, несколько векторов даты в m — 6 матриц и несколько последовательных чисел даты в матрице.

Можно преобразовать любой из этих форматов к datetime массив с помощью datetime функция. Если ваш существующий код MATLAB ожидает последовательный номер даты или вектор даты, используйте datenum или datevec функции, соответственно, чтобы преобразовать datetime массив к ожидаемому формату данных. Преобразовывать datetime массив к векторам символов, используйте char или cellstr функции.

Начиная в R2016b, также можно преобразовать datetime массив к массиву строк с string функция.

Преобразование между Datetime и векторами символов

Строка даты может быть вектором символов, состоявшим из полей, связанных с определенной датой и/или время. Существует несколько способов представлять даты и времена в текстовом формате. Например, все следующее является векторами символов, представляющими 23 августа 2010 в 16:35:42:

'23-Aug-2010 04:35:06 PM' 'Wednesday, August 23' '08/23/10 16:35' 'Aug 23 16:35:42.946'

Строка даты включает символы, которые разделяют поля, такие как дефис, пробел и двоеточие, используемое здесь:

d = '23-Aug-2010 16:35:42' 

Преобразуйте одну или несколько строк даты в datetime массив с помощью datetime функция. Для лучшей эффективности задайте формат входных строк даты как вход к datetime .

Примечание

Спецификаторы, что datetime использование, чтобы описать форматы даты и времени отличается от спецификаторов что datestr , datevec , и datenum функции принимают.

Для полного списка спецификаторов формата даты и времени смотрите Format свойство datetime тип данных.

t = datetime(d,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = datetime 23-Aug-2010 16:35:42

Несмотря на то, что строка даты, d , и datetime скаляр, t , выглядите подобными, они не равны. Просмотрите размер и тип данных каждой переменной.

whos d t
Name Size Bytes Class Attributes d 1x20 40 char t 1x1 17 datetime

Преобразуйте datetime массив к использованию вектора символов char или cellstr . Например, преобразуйте текущую дату и время к метке времени, чтобы добавить к имени файла.

t = datetime('now','Format','yyyy-MM-dd''T''HHmmss')
t = datetime 2017-01-03T151105
S = char(t); filename = ['myTest_',S]
filename = 'myTest_2017-01-03T151105'

Преобразование между массивами datetime и массивами строк

Начиная в R2016b, можно использовать string функция, чтобы создать массив строк. Если массив строк содержит строки даты, то можно преобразовать массив строк в datetime массив с datetime функция. Точно так же можно преобразовать datetime массив к массиву строк с string функция.

Преобразуйте массив строк. MATLAB отображает строки в двойных кавычках. Для лучшей эффективности задайте формат входных строк даты как вход к datetime .

str = ["24-Oct-2016 11:58:17"; "19-Nov-2016 09:36:29"; "12-Dec-2016 10:09:06"]
str = 3×1 string array "24-Oct-2016 11:58:17" "19-Nov-2016 09:36:29" "12-Dec-2016 10:09:06"
t = datetime(str,'InputFormat','dd-MMM-yyyy HH:mm:ss')
t = 3×1 datetime array 24-Oct-2016 11:58:17 19-Nov-2016 09:36:29 12-Dec-2016 10:09:06

Преобразуйте datetime значение к строке.

t = datetime('25-Dec-2016 06:12:34'); str = string(t)
str = "25-Dec-2016 06:12:34"

Преобразование между векторами Datetime и даты

Вектор даты 1 6 вектор из чисел с двойной точностью. Элементы вектора даты с целочисленным знаком, за исключением элемента секунд, который может быть дробным. Временные стоимости описываются в 24-часовом обозначении. Нет никакой установки AM или PM.

Вектор даты располагается в следующем порядке:

year month day hour minute second

Следующий вектор даты представляет 10:45:07 24 октября 2012:

[2012 10 24 10 45 07]

Преобразуйте один или несколько векторов даты в datetime массив с помощью datetime функция:

t = datetime([2012 10 24 10 45 07])
t = datetime 24-Oct-2012 10:45:07

Вместо использования datevec чтобы извлечь компоненты значений datetime, используйте функции такой как year , month , и day вместо этого:

y = year(t)
y = 2012

В качестве альтернативы получите доступ к соответствующему свойству, такому как t.Year для значений года:

y = t.Year
y = 2012

Преобразование последовательных чисел даты в Datetime

Последовательный номер даты представляет календарную дату как номер дней, который передал начиная с установленной основной даты. В MATLAB последовательная дата номер 1 1 января, 0000.

Последовательное время может представлять части дней, начинающихся в полночь; например, 18:00 равняется 0,75 последовательным дням. Так вектор символов ’31-Oct-2003, 6:00 PM’ в MATLAB дата номер 731885.75.

Преобразуйте одно или несколько последовательных чисел даты в datetime массив с помощью datetime функция. Задайте тип номера даты, который преобразуется:

t = datetime(731885.75,'ConvertFrom','datenum')
t = datetime 31-Oct-2003 18:00:00

Преобразование массивов datetime в числовые значения

Некоторые функции MATLAB принимают типы числовых данных, но не значения datetime как входные параметры. Чтобы применить эти функции к вашим данным о дате и времени, преобразуйте значения datetime в значимые числовые значения. Затем вызовите функцию. Например, log функция принимает double входные параметры, но не datetime входные параметры. Предположим, что у вас есть datetime массив дат, охватывающих курс изыскания или эксперимента.

t = datetime(2014,6,18) + calmonths(1:4)
t = 1×4 datetime array 18-Jul-2014 18-Aug-2014 18-Sep-2014 18-Oct-2014

Вычтите значение источника. Например, значение источника может быть стартовым днем эксперимента.

dt = t - datetime(2014,7,1)
dt = 1×4 duration array 408:00:00 1152:00:00 1896:00:00 2616:00:00

dt duration массив. Преобразуйте dt к double массив значений в модулях лет, дней, часов, минут или секунд с помощью years дни часы минуты , или seconds функция, соответственно.

x = hours(dt)
x = 408 1152 1896 2616

Передайте double массив как вход к log функция.

y = log(x)
y = 6.0113 7.0493 7.5475 7.8694

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *