Konwersja typu DateTime do shortDate

Odpowiedz Nowy wątek
2012-07-05 01:47

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Nie mogę poradzić sobie z problemem.
Mam querry z parametrem "date",która wybiera wiersze, zawierające odpowiednią datę .
Więc VS chce parametr typu Date .

Tabela2TableAdapter.GetDataByDate(date); 

I tu się pojawia problem.
BO jeśli pociągne z monthcalendar wybraną datę do dostaję ją z godziną.
Wiem, że istnieje TOShortDateString(), ale to jest dla stringa. A w przypadku querry potrzebny typ Date bez godziny.
Jest możliwa taka konwersja ??

Próbowałem nawet w ten sposób

public class Data 
    {
        public int rok;
        public int miesiac;
        public int dzien;

        public Data(int year, int month, int day)
        {
            rok = year;
            miesiac = month;
            dzien = day;

        }

    } 

I co mnie zaskoczyło

Data data1 = new Data(year,month,day)

MessageBox.Show(Convert.ToString(data1)); 

Wyświetla mi nazwę programu i klasy 8|

edytowany 3x, ostatnio: Lechu_2, 2012-07-05 03:00

Pozostało 580 znaków

msm
2012-07-05 03:31
msm
Administrator

Rejestracja: 10 lat temu

Ostatnio: 6 godzin temu

0

Bo Convert.ToString(data1) woła pewnie po prostu .ToString() na twoim obiekcie - a ty nie przeciążasz .ToString() i tak właśnie wychodzi... Wszystko działa normalnie, tylko takie jest wyświetlanie.

http://msdn.microsoft.com/en-[...]ry/ms173154%28v=vs.80%29.aspx

Tworzenie własnej klasy to raczej zły pomysł, ale jakoś nie rozumiem o co Ci ogólnie chodzi (albo piszesz niewyraźnie, albo jest za późno :>. Czas iść spać chyba).
Masz przecież ładną strukturę http://msdn.microsoft.com/en-us/library/system.datetime.aspx ?

Pozostało 580 znaków

2012-07-05 10:48

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Chodzi mi o to, że typ DateTime posiada datę i czas, a mi chodzi o samą datę.
Chcę zrobić tak by zmienna typu DateTime (nie string) niosła samą datę.

Pozostało 580 znaków

2012-07-05 11:41

Rejestracja: 11 lat temu

Ostatnio: 3 lata temu

1

Po co? Zawsze przy tworzeniu obiektu DateTime możesz "wyczyścić" część czasową (czyli ustawić 00:00:00) a wyświetlając użyć odpowiedniego formatowania, czyli np. yyyy-MM-dd
DateTime wspiera operacje na datach, a twoja klasa nie. Zważ też że struktura DateTime wewnętrznie przechowuje datę jako long.

http://msdn.microsoft.com/en-us/library/cc716729.aspx
Nie mam czasu sprawdzać, ale jeśli parametr (kolumna) w MS sql server jest typu date, z kodu podajesz obiekt typu datetime, to i tak do porównania wzięta będzie tylko tylko część datowa? Sprawdź.

Pozostało 580 znaków

2012-07-05 13:38

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

Próbowałem błąd konwersji sypie.

Właśnie chodzi o to, że potrzebuje DateTime bez części czasowej. I nie może to być string gdyż VS sadzi się, że to nie ten typ. Miałem cichą nadzieje, że pójdzie jakaś niejawna konwersja ale niestety :(

Może naświetle co chce zrobić.

Jest stworzone querry przy tableadapter


SELECT        Nr_jazdy, Data, Start, Stop, Ulica_start, Instruktorzy_nr, Kursy_index, Samochody_nr_rejestracyjny
FROM            Jazdy
WHERE        (Data = 'date')
ORDER BY Start

Chce wywołać z kodu to querry

jazdyTableAdapter.GetDataByDate(date);

więc muszę tam wciśnać date . Ale jak wsadzę DateTime jest błąd konwersji, string tak samo :(
Kolumna data jest typu date

Zacząłem się zastanawiać czy ogólnie jest to prawidłowo.

edytowany 2x, ostatnio: Lechu_2, 2012-07-05 15:01

Pozostało 580 znaków

2012-07-06 00:07
Moderator

Rejestracja: 11 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Wrocław

1
Lechu_2 napisał(a):

Właśnie chodzi o to, że potrzebuje DateTime bez części czasowej.

DateTime.Date?

I nie może to być string gdyż VS sadzi się, że to nie ten typ. Miałem cichą nadzieje, że pójdzie jakaś niejawna konwersja ale niestety :(

Może zamiast mieć cichą nadzieję lepiej przeczytać komunikat błędu i dokumentację?


jazdyTableAdapter.GetDataByDate(date);

> 
> więc muszę tam wciśnać date . Ale jak wsadzę DateTime jest błąd konwersji, string tak samo :(
> Kolumna data jest typu date

A jakiego typu jest argument `date`? Bo przecież z tym masz problem.

"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2012-07-06 11:31

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

0

parametr date jest , typu Date (ustawiałem przy pomocy VS) i generalnie kwerenda nie działa prawidłowo (wywala błąd konwersji) w Query buildier .

DateTime.Date jeżeli to wrzucisz do zmiennej typu DateTime to i tak będziesz miał czas tylko, że same zera.

edytowany 1x, ostatnio: Lechu_2, 2012-07-06 11:32

Pozostało 580 znaków

2012-07-08 01:11

Rejestracja: 8 lat temu

Ostatnio: 7 lat temu

Rozwiązaniem problemu j est poprawienie kwerendy .

WHERE       DATA = @Param 

gdzie Param jest stringiem.

Wskazówka dla tych co zamierzają wpuścić to w datagrid

kod poglądowy

bindingsource.DataSource = nasza kwerenda ;
datagridview.DataSource = bindingsource;
edytowany 1x, ostatnio: Lechu_2, 2012-07-08 01:13

Pozostało 580 znaków

2012-07-08 01:35
Moderator

Rejestracja: 11 lat temu

Ostatnio: 4 godziny temu

Lokalizacja: Wrocław

0
Lechu_2 napisał(a):

parametr date jest , typu Date

Nie, nie jest. W C#/.NET nie ma typu Date. No chyba, że sam taki utworzyłeś.

DateTime.Date jeżeli to wrzucisz do zmiennej typu DateTime to i tak będziesz miał czas tylko, że same zera.

Wiem przecież, dlatego Ci to zaproponowałem, bo m.in. w ten sposób można zinterpretować stwierdzenie "potrzebuję DateTime bez części czasowej".


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

Odpowiedz

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