AZHAR SAYYAD Ответов: 4

Как выбрать только дату из строки в C#


Здравствуйте у меня есть строка Я мое приложение которое я извлекаю из базы данных я хочу только выбрать дату из моей строки

Что я уже пробовал:

моя строка-string var = P 2016-10-31; я пробовал это, но я могу получить только P из этого, что я могу сделать, чтобы я мог выбрать только дату (2016-10-31)

Perić Željko

По этой ссылке есть интересные вещи о строках и датах внутри них :

http://www.codeproject.com/Answers/297126/Csharp-How-to-check-if-a-string-contains-a-date#answer8

4 Ответов

Рейтинг:
22

OriginalGriff

Это действительно зависит от формата данных - если это всегда один символ, пробел, а затем дата, это тривиально:

string input = "P 2016-10-31";
string justTheDate = input.Substring(2);
DateTime dt;
if (DateTime.TryParseExact(justTheDate, "yyyy-M-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt))
    {
    ...
    }

Если он меняется, то вам нужно внимательно посмотреть, что именно это такое. мочь Будьте и, возможно, рассмотрите вместо этого регулярное выражение.


Рейтинг:
0

#realJSOP

string myString = "P 2016-10-31";
string[] parts = mystring.Split(' ');
DateTime date = DateTime.ParseExact(parts[1], "yyyy-MM-dd", CultureInfo.InvariantCulture);


Рейтинг:
0

F-ES Sitecore

string s = "P 2016-10-31";
DateTime dt;
DateTime.TryParseExact(s, "P yyyy-MM-dd", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None, out dt);


Рейтинг:
0

Midi_Mick

Некоторое время назад у меня была похожая проблема, когда несколько дат с несколькими структурами могли быть в любом месте документа. Следующий код получил их все:
(Примечание: Я нахожусь в Австралии, поэтому короткий формат даты-dd/MM/yy).

string test;
 
Regex re = new Regex(@"\b(?<datetime>" +
		// Date part
		@"((" +
			@"(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{2}(\d{2})?)" +
			@"|(\d{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*,?\s+\d{2}\d{2}?)" + 
			@"|((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*\s+\d{1,2},?\s+\d{2}\d{2}?)" +
			@"|(\d{4}\-\d{1,2}-\d{1,2})" +
		@")" +
		// Optional time part
		@"(" +
			@"[T\s]?\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?" +
		@")?)" +
		// Stand alone time
		@"|(\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?)" +
    @")\b", RegexOptions.IgnoreCase);
 
test = " 29/11/15 xxx 29 November 2015 6:27PM xxx 2015-11-29T18:27:45.50+10:00 xxx 2015-11-29 18:27:45.50Z xxx NOV 29, 2015 xxxx 21:15";
 
MatchCollection matches = re.Matches(test);
 
foreach (Match m in matches) {
	DateTime dt;
	if (DateTime.TryParse(m.Groups["datetime"].Value, out dt)
		Console.WriteLine("{0}\t\t{1}", m.Groups["datetime"].Value, dt);
}