#c# #parsing #datetime
#c# #синтаксический анализ #дата и время
Вопрос:
Я пытаюсь проанализировать 23.11.2011 23:59:59 UTC 0800 как объект c # datetime, но, используя стандартный метод анализа даты и времени или даже точный анализ даты и времени, я получаю недопустимую дату.
Есть какие-нибудь идеи?
Комментарии:
1. В какое время вы хотите? Вы живете в стране, где UTC 08? Вы хотите, чтобы ваше DateTime указывало время UTC (так 24 ноября 07:59) или что?
2. в местное время машины, на которой он работает
Ответ №1:
Я бы посоветовал вам выполнить синтаксический анализ с использованием a DateTimeOffset
вместо a DateTime
, как рекомендуется в MSDN при использовании спецификатора смещения часового пояса в строке формата:
using System;
using System.Globalization;
class Test
{
static void Main(string[] args)
{
string text = "11/23/2011 23:59:59 UTC 0800";
string pattern = "MM/dd/yyyy HH:mm:ss 'UTC' zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact
(text, pattern, CultureInfo.InvariantCulture);
Console.WriteLine(dto);
}
}
Затем вы можете преобразовать это в DateTime
значение в UTC, если хотите, но нет такого понятия, как «a DateTime
со смещением в 8 часов» — a DateTime
считается универсальным, локальным или неопределенным, и нигде не сохраняется конкретное смещение.
DateTime
это любопытный тип по-разному и может вызвать проблемы у неосторожного разработчика.
Ответ №2:
Msdn для настроек формата: https://msdn.microsoft.com/en-us/library/az4se3k1 (v = против 110).aspx
public class Program
{
public static void Main()
{
//original date
string _date = "Thu Jan 15 11:32:09 0200 2015";
// Describes the date format
string _parsePattern = "ddd MMM dd HH:mm:ss zzz yyyy";
DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
//last settings
Console.WriteLine(dto.ToString("dd.MM.yyyy hh:mm:ss",CultureInfo.CreateSpecificCulture("tr-TR")));
}
}
для метода расширения:
public static DateTime getDateFromFormat(this string _date, string _parsePattern)
{
DateTimeOffset dto = DateTimeOffset.ParseExact(_date, _parsePattern, CultureInfo.InvariantCulture);
return Convert.ToDateTime(dto.ToLocalTime());
}
Для теста: https://dotnetfiddle.net/xdnjGy
Ответ №3:
Как написано Джеймсом, вы можете попробовать
var dt = DateTime.ParseExact(
"11/23/2011 23:59:59 UTC 0800",
"MM/dd/yyyy HH:mm:ss 'UTC' K",
CultureInfo.InvariantCulture);
Вы получите дату по «местному» времени.
Ответ №4:
Я думаю, вам нужно использовать ParseExact http://msdn.microsoft.com/en-us/library/w2sa9yss.aspx