Błąd przy parsowaniu daty ze stringa

0

Mam sobie string w takim formacie: "1/1/2012"
Chcę z tego uzyskać DateTime więc daję:

 DateTime.Parse(kursy[i].data)

Niestety dostaję wyjątek: String was not recognized as a valid DateTime.

Hmm, próbuję jeszcze w taki sposób:

 DateTime.ParseExact(kursy[i].data, "dd/MM/yyyy", CultureInfo.InvariantCulture)

Dostaję jednak ten sam wyjątek.

Co robię źle?

0

Jakiego typu jest data w kursy[i]?

0

string

0

Spróbuj:

DateTime.ParseExact(kursy[i].data, "dd MM yyyy", CultureInfo.InvariantCulture)
0

To samo :(

Najlepsze, że ten przykład działa:

public class dbdata
    {
        public string Datum;
        public float Hoog;
        public float Laag;
        public float PrijsOpen;
        public float PrijsGesloten;
        public dbdata(string d, float h, float l, float o, float c) { Datum = d; Hoog = h; Laag = l; PrijsOpen = o; PrijsGesloten = c; }
    } 
List<dbdata> k = new List<dbdata> { 
            new dbdata("1/1/2012", 10f, 8f, 9f, 9.5f),
            new dbdata("2/1/2012", 15F, 10F, 12F, 13F),
            new dbdata("3/1/2012", 5F, 10F, 8F, 6F),
            new dbdata("4/1/2012", 25F, 10F, 18F, 16F) 
for (int i = 0; i < k.Count; i++)
            {
                // adding date and high
                chart1.Series["price"].Points.AddXY(DateTime.Parse(k[i].Datum), k[i].Hoog);
                // adding low
                chart1.Series["price"].Points[i].YValues[1] = k[i].Laag;
                //adding open
                chart1.Series["price"].Points[i].YValues[2] = k[i].PrijsOpen;
                // adding close
                chart1.Series["price"].Points[i].YValues[3] = k[i].PrijsGesloten;
            } 

Natomiast mój odpowiednik wali właśnie wyjątkiem pomimo takiego samego formatu...

0

Pokombinuj z formatem w jakim zapisujesz datę, czy na pewno stosujesz "/" bo podejrzewam, że coś namieszałeś w samym zapisie daty.

0

Datę zapisuję w taki sposób:

int x=1;
string date = (x.ToString() + "/1/2012");
Kurs kurs = new Kurs(date, open, close, max, min);

Klasa Kurs:

public class Kurs
    {
        public string data;
        public float open;
        public float close;
        public float max;
        public float min;

        public Kurs(string data, float open, float close, float max, float min)
        {
            this.data = data;
            this.open = open;
            this.close = close;
            this.max = max;
            this.min = min;
        }
    } 

Debugger dla każdego kursu pokazuje stringa w formacie: "dd/MM/yyyy" czyli np. "1/1/2012"

1
    public partial class Form1 : Form
    {
        string[] Data = new string[100];
        public Form1()
        {
            InitializeComponent();
        }

        private void View_DataTime_button_Click(object sender, EventArgs e)
        {
            DateTime newData;
            newData = DateTime.ParseExact(Data[0], "dd/MM/yyyy", CultureInfo.InvariantCulture);

            MessageBox.Show(newData.ToString());
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            Data[0] = "21/01/2015";
        }

Działa w 100% powyższy kod.

4

Nie zadziała dla jego przykładu "1/1/2015" dla formatu "dd/MM/yyyy" ponieważ poprawny format dla tej daty to "d/M/yyyy":

dzień => "dd" => "01"
miesiąc => "MM" => "01"
rok => "yyyy" => "2015

a potrzeba:
dzień => "d" => "1"
miesiąc ="M" => "1"
rok => "yyyy" => "2015"

Można sprawdzić tutaj: https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx

1

Może d/M/yyyy w końcu przecież masz 1 cyfrowy miesiąc i rok (na 2 cyfrowym też zadziała bez obawy).

0

Dzięki Panowie za pomoc. Już wszystko OK.

1 użytkowników online, w tym zalogowanych: 0, gości: 1