Удаление временной части из строки с #

Я пытаюсь удалить часовой пояс из строки.

Строка выглядит так, как показано ниже.

2/05/2018 6:54:00 AM

Эти данные были получены из локальной базы данных.

Часть кода:

 string datCommisioned = (rdr.GetValue(4).ToString());
 string dateonly = datCommisioned.ToString("dd/MM/yyyy");

Когда я попытался выполнить приведенный выше код, он получил ошибку,

cannot convert from 'string' to 'System.IFormatProvider'

Есть идеи, как поймать дату без учета времени? Спасибо!

Обновлено: это, вероятно, не повторяющийся вопрос, поскольку я ссылаюсь на другие вопросы перед публикацией. Контекст этого вопроса отличается, потому что строка, которую я извлекаю, не распознается как действительный DateTime (вводится вручную пользователями), поэтому класс DateTime использовать нельзя.

datCommisioned - это строка, и вы снова пытаетесь преобразовать ее в строку. String.ToString () принимает IFormatProvider.
Chetan Ranpariya 02.05.2018 02:54

Возможный дубликат Чтение даты с помощью DataReader

Chetan Ranpariya 02.05.2018 02:55

Смотри сюда stackoverflow.com/questions/5619216/…

Chetan Ranpariya 02.05.2018 02:55
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
539
4

Ответы 4

Вам просто нужно изменить его на это.

var datCommisioned = DateTime.parse(rdr.GetValue(4)).ToString("dd/MM/yyyy");

В настоящее время вы конвертируете его в строку, а затем пытаетесь ToString () String, когда вам просто нужно toString () дату из читателя.

Как узнать, что GetValue возвращает DateTime?

Tim 02.05.2018 02:57

Да просто понял, что нет. Нужно отредактировать его, чтобы разобрать.

Joe Hartzell 02.05.2018 02:59

Есть несколько подходов

  1. Используйте объект DateTime.

    DateTime dateTime = DateTime.Parse(datCommissioned);
    string dateonly = dateTime.ToString("dd/MM/yyyy");
    
  2. Разделить на пробелы

    var split = datCommissioned.Split(' ');
    string dateonly = split[0];
    

Я бы не стал предлагать синтаксический анализ, если вы можете получить DateTime прямо из DataReader.

Camilo Terevinto 02.05.2018 03:03

@CamiloTerevinto нигде не заявляет, что он использует DataReader, хотя по сокращению я понимаю, почему это предполагается.

Tim 02.05.2018 03:04

Да, как сказал Камило, я использую объект чтения данных для чтения данных из локальной базы данных. Эти данные были вставлены пользователями вручную. Когда я использую класс DateTime, есть исключение. System.FormatException: «Строка не была распознана как допустимый DateTime». Я понимаю, что причина этой проблемы в том, что данные были введены пользователями вручную. @Тим

matt daemon 02.05.2018 03:11

@mattdaemon - много способов обойти это. Поместите try вокруг Parse или как-нибудь проверьте правильность данных перед анализом. Если он сохраняется / извлекается как строка, другой ответ здесь не сработает.

Tim 02.05.2018 03:12
//Assuming value at index 4 is a DateTime.
string datCommisioned = rdr.GetDateTime(4).ToString(@"dd/MM/yyyy");

Хорошая практика - использовать более конкретные и строго типизированные методы с DataReader. Помогает быстрее выявлять ошибки.

почему знак "@"?

pm100 02.05.2018 03:17

@ pm100 stackoverflow.com/questions/3311988/…

Daniel Mann 02.05.2018 03:21

@ pm100, чтобы избежать экранирования ('\'), если они будут добавлены. Моя привычка, но в этом примере она не обязательна. Инстинктивно я избегаю экранирования в строках формата.

Zer0 02.05.2018 03:24

Просто другой подход здесь; Вы можете использовать DateTime.Parse () или, возможно, более безопасную альтернативу DateTime.TryParse (), чтобы преобразовать строку в объект DateTime. Затем используйте свойство Date объекта DateTime, чтобы установить время в полночь, т.е. 00:00:00. В зависимости от того, для чего вы используете дату, может оказаться полезным использование объекта DateTime вместо строки. Затем вы можете вызвать ToString («d») или использовать другое средство форматирования, чтобы получить часть только даты в желаемом формате.

if (TryParse(datCommissioned, out DateTime commissionedDate))
{
       commisionedDate = commisionedDate.Date;
       string commissionedDateText = commissionedDate.ToString(“dd/MM/yyyy”);
}

Другие вопросы по теме