PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arbeiten mit Datumsformaten


Floyd
25.07.2003, 11:26
Hi leute,

ich bekomme aus ner Datenbank ein Datum in dieser Form: 26.05.2002 und möchte das nun in dieses Format umwandeln:

Sonntag, 26. Mai 2002

Laut meinen ASP.Net buch müßte das so gehen:

dim temp as DateTime= ds.Tables(0).Rows(0)("Erstellt")
lblerstellt.text=temp.ToString(D)

tut es aber leider net: Cast from string "" to type 'Date' is not valid.

wie muss ich das machen?


Scavi
25.07.2003, 12:06
Nutzt du als Datenbank MSSQL ? Da gibts dann nämlich den Typ DbType.DateTime !

Floyd
25.07.2003, 12:10
ne Access :)

Scavi
25.07.2003, 12:21
Hmmm, das habe ich noch nicht gemacht. Über ODBC ? Sicherlich gibts da auch einen DataReader für ! Wenn dies der Fall ist probier mal sowas (musste deiner Basicsyntax anpassen):

command ist dein XXXCommand

XXXDataReader reader = command.ExecuteReader();
while (reader.Read())
{
DateTime dt = reader.GetDateTime(was_hier_steht_musste_ändern);
}

Floyd
25.07.2003, 12:24
hier hast du den kompletten code:

Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
Dim conSql as OleDbConnection=New OleDbConnection()
Dim Datenbank as String = Server.MapPath("db/password3.mdb")
Dim ds As DataSet = New DataSet()
Dim da As OleDbDataAdapter = New OleDbDataAdapter()
Dim sqlCommand as String
dim dr as DataRow
conSql.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Datenbank
Try
conSql.Open()
if conSql.State=ConnectionState.Open then
'Verbindung offen
sqlCommand="select * from eMail WHERE Eigentuemer_ID={guid {E036A3FB-2CEE-44AE-B19E-A0F11EC971C2}}"
'Set what we want to Select
da.SelectCommand = New OleDbCommand(sqlCommand, conSql)
'Fill the DataSet with the Data
da.Fill(ds)
if ds.Tables(0).Rows.Count >0 then
if ds.Tables(0).Rows(0)("Domain")<>"" then
dim temp as string=ds.Tables(0).Rows(0)("Domain")
if not Left(temp, 7) = "http://" then
temp= "http://" & temp
end if
lblDomain.text="<a href='" & temp & "'target='_blank'>" & temp & "</a>"
end if
if ds.Tables(0).Rows(0)("eMail_Adresse")<>"" then
dim temp as string=ds.Tables(0).Rows(0)("eMail_Adresse")
lbleMailAdresse.text="<a href='mailto:" & temp & "'>" & temp & "</a>"
end if
if ds.Tables(0).Rows(0)("Benutzer")<>"" then
lblBenutzer.text=ds.Tables(0).Rows(0)("Benutzer")
end if
if ds.Tables(0).Rows(0)("Key")<>"" then
lblKennwort.text=ds.Tables(0).Rows(0)("Key")
end if
if ds.Tables(0).Rows(0)("POP3")<>"" then
lblpop.text=ds.Tables(0).Rows(0)("POP3")
end if
if ds.Tables(0).Rows(0)("SMTP")<>"" then
lblsmtp.text=ds.Tables(0).Rows(0)("SMTP")
end if
if ds.Tables(0).Rows(0)("IMAP")<>"" then
lblimap.text=ds.Tables(0).Rows(0)("IMAP")
end if
if ds.Tables(0).Rows(0)("Erstellt")<>"" then
dim temp as DateTime = ds.Tables(0).Rows(0)("Erstellt")
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
lblerstellt.text=temp.ToString()
end if
if ds.Tables(0).Rows(0)("eigener_account")=false then
lblinhaber=ds.Tables(0).Rows(0)("Fremd_Account_Eigentuemer")
lblinhaberDesc.visible="true"
lblinhaber.visible="true"
end if
if ds.Tables(0).Rows(0)("anmerkung")<>"" then
lblanmerk.text=ds.Tables(0).Rows(0)("anmerkung")
end if
end if
else
'verbindung nicht offen
conSql.Close()
end if
if conSql.State=ConnectionState.Open then
conSql.Close()
end if
Catch ex As Exception
response.write(ex.Message)
end Try
End Sub

BrOmstar
25.07.2003, 12:28
Der Fehler liegt beim zuweisen des DateTime-Wertes in der ersten Zeile. Die zweite Zeile mit der Formatierung ist iO.

Dim temp As DateTime = ds.Tables(0).Rows(0)("Erstellt")

Hier möchtest du dem DateTime-Objekt einen Eintrag aus deiner Datenquelle zuweisen-> dadurch wird der Fehler erzeugt.

-> Cast from string "" to type 'Date' is not valid.

Du kannst nicht einfach einem DateTime-Objekt eine Datumsangabe in diesem Format zuweisen. Du musst dem DateTime-Objekt eine neue Instanz zuweisen.

Da gibt es verschiedene Varianten zB

Initialisiert eine neue Instanz der DateTime-Struktur mit dem angegebenen Jahr, Monat und Tag.

[Visual Basic] Public Sub New(Integer, Integer, Integer)

als Beispiel für dich

Dim temp As DateTime = New DateTime (2003,07,21)

Nu musst du dafür sorgen das die Daten aus deiner Datenquelle so zugerichtet werden das sie in den DateTime-Konstruktor passen^^


Hmmm als Anhang gibts noch die restlichen Konstruktoren


Initialisiert eine neue Instanz der DateTime-Struktur mit der angegebenen Anzahl von Ticks.

[Visual Basic] Public Sub New(Long)

Initialisiert eine neue Instanz der DateTime-Struktur mit dem angegebenen Jahr, Monat und Tag.

[Visual Basic] Public Sub New(Integer, Integer, Integer)

Initialisiert eine neue Instanz der DateTime-Struktur mit dem angegebenen Jahr, Monat und Tag für den angegebenen Calendar.

[Visual Basic] Public Sub New(Integer, Integer, Integer, Calendar)

Initialisiert eine neue Instanz der DateTime-Struktur mit den angegebenen Werten für Jahr, Monat, Tag, Stunde, Minute und Sekunde.

[Visual Basic] Public Sub New(Integer, Integer, Integer, Integer, Integer, Integer)

Initialisiert eine neue Instanz der DateTime-Struktur mit den angegebenen Werten für Jahr, Monat, Tag, Stunde, Minute und Sekunde für den angegebenen Calendar.

[Visual Basic] Public Sub New(Integer, Integer, Integer, Integer, Integer, Integer, Calendar)

Initialisiert eine neue Instanz der DateTime-Struktur mit den angegebenen Werten für Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunde.

[Visual Basic] Public Sub New(Integer, Integer, Integer, Integer, Integer, Integer, Integer)

Initialisiert eine neue Instanz der DateTime-Struktur mit den angegebenen Werten für Jahr, Monat, Tag, Stunde, Minute, Sekunde und Millisekunde für den angegebenen Calendar.

[Visual Basic] Public Sub New(Integer, Integer, Integer, Integer, Integer, Integer, Integer, Calendar)

Floyd
25.07.2003, 12:32
ähm ja.... gut und was muss ich jetzt genau machen um aus

26.5.2002 9:00:00

ein

Sonntag, 26. Mai 2002 9:00 zu bekommen?????

Scavi
25.07.2003, 12:32
Convert.ToDateTime(...) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstodatetimetopic10.asp)

Floyd
25.07.2003, 12:36
Original geschrieben von Scavi
Convert.ToDateTime(...) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstodatetimetopic10.asp)
thx aber das bringt mir nicht viel.. wenn ich den post von BrOmstar richtig deute lese ich dei daten falsch ein!

Scavi
25.07.2003, 12:39
N Beispiel:


string strDateTime = "2002-06-20-20.23.31.414646";
DateTime time = DateTime.ParseExact(strDateTime, "yyyy-MM-dd-HH.mm.ssffffff",new DateTimeFormatInfo());

Floyd
25.07.2003, 12:42
schau dir mal meine Code an! den post von BrOmaster und die Fehlermeldung.

Er kommt ja net mal bis zum Formatieren! er hängt ja schon am DIM fest!!!!!

Scavi
25.07.2003, 12:46
Du sollst es ja auch als string auslesen ! ...Dann wie beschrieben parsen !

BrOmstar
25.07.2003, 12:47
des geht natürlich auch ..wusst nich das es des fertig gibt



Dim myTime As DateTime = DateTime.ParseExact("26.5.2002 9:00:00","dd_MM_yyyy HH.mm.ss",new DateTimeFormatInfo()) )

Label1.Text = myTime.ToString("D")


Nachtrag für dein Problem reicht Parse völlig aus

dim temp as DateTime= DateTime.Parse(ds.Tables(0).Rows(0)("Erstellt") )
lblerstellt.text=temp.ToString(D)

und Problem gelöst =)

Floyd
25.07.2003, 12:55
ich hab jetzt erst mal die namespace eingebunden: <%@ import Namespace="System.Globalization" %>

und diesen code:

Dim myTime As DateTime = DateTime.ParseExact(ds.Tables(0).Rows(0)("Erstellt"),"dd_MM_yyyy HH.mm.ss",new DateTimeFormatInfo())
lblerstellt.Text = myTime.ToString("f")

leider kommt immernoch der fehler und das feld belibt leer

Scavi
25.07.2003, 13:28
26.5.2002 9:00:00

parsen:

DateTime.ParseExact(ds.Tables(0).Rows(0)("Erstellt"),"dd.MM.yyyy HH:mm:ss",new DateTimeFormatInfo())

Floyd
25.07.2003, 13:31
ne geht auch net!

kann ich es denn wenigstens hinbekommen das das datum so wie es in der DB steht im label steht???

Scavi
25.07.2003, 13:34
als was ist es denn in der DB gespeichert ? Als string, oder ?

Floyd
25.07.2003, 13:38
Original geschrieben von Scavi
als was ist es denn in der DB gespeichert ? Als string, oder ?

als "DateTime" in diesem Format: 26.05.2003 12:35:00

Scavi
25.07.2003, 13:41
..dann müsstest du es doch auch genauso wieder auslesen können ! Bringt er irgendwelche Fehler ?

Floyd
25.07.2003, 13:44
Cast from string "" to type 'Date' is not valid.

wie eh und je!

BrOmstar
25.07.2003, 19:50
nutz meinen Vorschlag er funktioniert und ist von mir getestet
anhand deines beispiels wenn der Wert aus der Datenquelle 26.5.2002 9:00:00 ist

nochmal die Zeilen

dim temp as DateTime= DateTime.Parse(ds.Tables(0).Rows(0)("Erstellt") )
lblerstellt.text=temp.ToString(D)

und alles geht

@scavi er nutzt vb.net das lässt sich dies sache nicht so umsetzen das beispiel ist aus c# hatte es mal probiert

Floyd
26.07.2003, 02:09
das kann net funtzen:

dim temp as DateTime= DateTime.Parse(ds.Tables(0).Rows(0)("Erstellt") )
lblerstellt.text=temp.ToString(D)

und wenn ich ein " vor das D schreibe geht es auch net! ich hab dir die auch die zugansdaten per mail geschickt. schau es dir bitte selber an!

Pulpapex
26.07.2003, 05:37
Cast from string "" to type 'Date' is not valid.
Soll ich mal raten? In der Db-Zelle steht ein leerer String. Die Fehlermeldung ist etwas verwirrend, weil man denkt, dass es ein Cast-Fehler ist. Aber einmal richtig hingucken hätte schon genügt :D :D

BrOmstar
26.07.2003, 12:09
also bei mir geht's habe ein beispielprog gebaut und wenn es lädt zeigt er das formatierte Datum an...natürlich darf der wert nicht leer sein ..aber das musste schon selber abfangen =)

Scavi
26.07.2003, 17:34
@BrOmstar: Ich weiss, dass mein Bsp. C# iss, ich kann leider nur C# und kein VB.NET aber das ist ja nüch so sehr verschieden, deswegen meinte ich ja, er sollte die Syntax an VB.NET anpassen.

@Pulpaplex: In der DB steht kein leerer String, das ist ja das verblüffende.

Pulpapex
27.07.2003, 00:09
Was ich bisher hier gesehen habe, wird immer ohne Umwege versucht, die Db-Zelle in eine DateTime-Variable zu bekommen. Wenn man den Zellen-Inhalt zunächst als String ausliest, müsste sich der Fehler doch leicht im Debugger finden lassen. Es scheint ja ein Parsing-Problem zu sein. Vielleicht steht null oder "null" drin. Oder vielleicht doch "", so wie es die Fehlermeldung angibt.

Scavi
27.07.2003, 17:49
Das hatte ich doch auch schon vorgeschlagen ! In der DB steht aber nicht NULL oder "" sondern das Datum !

Floyd
11.08.2003, 10:56
Hallo leute, bin jetzt aus dem Urlaub zurück. Leider geht das Script noch immer net. Hätte wer lust sich das ganze mal anzuschauen?? Dann schick ich ihm es per Mail? Währe echt net!

In der Datenbank steht übrigens ein echtes! Datum :)

Cord Worthmann
11.08.2003, 11:32
da bin ich sehr gespannt - auf jeden fall würde ich mir das gerne näher ansehen...


grtz
chief

Floyd
11.08.2003, 12:14
Original geschrieben von Chief Brodie
da bin ich sehr gespannt - auf jeden fall würde ich mir das gerne näher ansehen...
dann bräuchte ich mal deine Mail-Adresse