Archiv verlassen und diese Seite im Standarddesign anzeigen : Arbeiten mit Datumsformaten
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?
Nutzt du als Datenbank MSSQL ? Da gibts dann nämlich den Typ DbType.DateTime !
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);
}
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)
ä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?????
Convert.ToDateTime(...) (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemconvertclasstodatetimetopic10.asp)
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!
N Beispiel:
string strDateTime = "2002-06-20-20.23.31.414646";
DateTime time = DateTime.ParseExact(strDateTime, "yyyy-MM-dd-HH.mm.ssffffff",new DateTimeFormatInfo());
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!!!!!
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 =)
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
26.5.2002 9:00:00
parsen:
DateTime.ParseExact(ds.Tables(0).Rows(0)("Erstellt"),"dd.MM.yyyy HH:mm:ss",new DateTimeFormatInfo())
ne geht auch net!
kann ich es denn wenigstens hinbekommen das das datum so wie es in der DB steht im label steht???
als was ist es denn in der DB gespeichert ? Als string, oder ?
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
..dann müsstest du es doch auch genauso wieder auslesen können ! Bringt er irgendwelche Fehler ?
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
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 =)
@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.
Das hatte ich doch auch schon vorgeschlagen ! In der DB steht aber nicht NULL oder "" sondern das Datum !
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
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
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.