Конвертировать необычную строку в дату - PullRequest
0 голосов
/ 25 августа 2011

У меня есть система, которая выводит даты в формате "1 {yy} {MM} {dd}", и я пытаюсь найти хороший способ разобрать их обратно в реальную дату. На данный момент я использую это:

  var value = "1110825";
  var z = Enumerable.Range(1,3).Select(i => int.Parse(value.Substring(i, 2))).ToList();
  var d = new DateTime(2000 + z[0], z[1], z[2]);

но я уверен, что есть более чистый / более эффективный способ сделать это?

Я пробовал DT.ParseExact, но не могу найти подходящую строку формата для использования.

Ответы [ 4 ]

9 голосов
/ 25 августа 2011

Это работает для меня:

using System;
using System.Globalization;

public class Test
{
    static void Main()
    {
        var value = "1110825";
        DateTime dt = DateTime.ParseExact(value, "1yyMMdd",
                                          CultureInfo.InvariantCulture);
        Console.WriteLine(dt);
    }
}

(Вы можете использовать TryParseExact, конечно, если вам нужно справиться с неверными данными любым способом, кроме как с исключением.)

Небольшое отклонение от этого - шаблон формата "'1'yyMMdd" - обратите внимание на апострофы вокруг 1. В кавычках 1 означает, что его следует рассматривать как "литерал" в шаблоне.В данном случае это не важно, но если у вас действительно есть такие значения, как «y110825», то вы хотите заключить в кавычки y, чтобы убедиться, что он не рассматривается как часть спецификатора года.

1 голос
/ 25 августа 2011

вы можете использовать DateTime.ParseExact:

вот пример для 26.12.1979:

    var parseback = DateTime.ParseExact("1791226", "1yyMMdd",
                                        System.Globalization.CultureInfo.CurrentCulture);
0 голосов
/ 05 ноября 2012

Просто используйте этот код

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace DateTimeConvert
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
          label1.Text= ConvDate_as_str(textBox1.Text);
        }

        public string ConvDate_as_str(string dateFormat)
        {
            try
            {
                char[] ch = dateFormat.ToCharArray();
                string[] sps = dateFormat.Split(' ');
                string[] spd = sps[0].Split('.');
                dateFormat = spd[0] + ":" + spd[1]+" "+sps[1];
                DateTime dt = new DateTime();
                dt = Convert.ToDateTime(dateFormat);
                return dt.Hour.ToString("00") + dt.Minute.ToString("00");
            }
            catch (Exception ex)
            {
                return "Enter Correct Format like <5.12 pm>";
            }

        }


        private void button2_Click(object sender, EventArgs e)
        {
           label2.Text = ConvDate_as_date(textBox2.Text);
        }

        public string ConvDate_as_date(string stringFormat)
        {
            try
            {
                string hour = stringFormat.Substring(0, 2);
                string min = stringFormat.Substring(2, 2);
                DateTime dt = new DateTime();
                dt = Convert.ToDateTime(hour+":"+min);
                return String.Format("{0:t}", dt); ;
            }
            catch (Exception ex)
            {
                return "Please Enter Correct format like <0559>";
            }
        }
    }
}
0 голосов
/ 25 августа 2011

Использование DateTime.ParseExact(string s, string format, IFormatProvider provider)

пример

DateTime.ParseExact("1110825", "1yyMMdd", CultureInfo.InvariantCulture);
...