Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Format Time

Îåêßíçóå áðü ôï ìÝëïò dtakis. Τελευταία δημοσίευση από το μέλος Παναγιώτης Καναβός στις 07-11-2008, 21:47. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-11-2008, 16:52 46093

    Format Time

    Τρέχω σε SQL query στο Management Studio το παρακάτω ερώτημα:

    SELECT DATEADD( hh, 2, '2008-11-05T20:02:47.84' ) AS GRTIME

    Το οποίο επιστρέφει (στο Management Studio) την παρακάτω τιμή:

    -----------------------
    GRTIME
    -----------------------
    2008-11-05 22:02:47.840

    Αν όμως την κάνω echo σε μια ιστοσελίδα τυπώνει:

    NovT5T2008T10:02PM

    Πότε έγινε αυτό το Conversion; Απλώς τυπώνω (υποτίθεται) ότι δώσει ο sql server!

    Δημοσίευση στην κατηγορία: ,
  •  07-11-2008, 17:13 46096 σε απάντηση της 46093

    Απ: Format Time

    Το βρήκα!

    SELECT CONVERT(VARCHAR(20), DATEADD( hh, 2, '2008-11-05T20:02:47.84' ), 121) AS GRTIME 

    και επιστρέφει 2008-11-05 22:02:47.

    Το οποίο και τυπώνεται σωστά με strip της "."

  •  07-11-2008, 19:31 46102 σε απάντηση της 46096

    Απ: Format Time

    Στην πρώτη περίπτωση περνάς από τη βάση προς τη σελίδα ένα Date τύπο τον οποίο ο κώδικάς σου (δεν ξέρω με τι κώδικα κάνεις αυτή τη δουλειά) εμφανίζει. Ο date τύπος είναι απλά data τα οποία αναπαρίστανται διαφορετικά σε κάθε context (πχ αλλιώς τα εμφανίζει το SSMS, αλλιώς ο .ΝΕΤ κώδικας, αλλιώς ο script κώδικα, κοκ), οπότε είναι ευθύνη του developer να πει πώς θέλει να εμφανίζονται. Στην δεύτερη περίπτωση έχεις ένα string το οποίο είναι πάντοτε ένα ...string οπότε όπως το διαβάζεις από τη βάση, έτσι κι εμφανίζεται.


    Vir prudens non contra ventum mingit
  •  07-11-2008, 21:47 46105 σε απάντηση της 46096

    Απ: Format Time

    Ο Μάνος έχει δίκιο. Όχι μόνο δεν "βρήκες" πως να γίνει το conversion αλλά και έχεις εισάγει ένα πιθανό bug στον κώδικα σου. Αντί να επιστρέψεις στην σελίδα ASP.NET ένα datetime το οποίο μετά θα χειριστεί όπως θέλει, επιστρέφεις ένα string σε ένα τυχαίο (όσον αφορά τη σελίδα) format το οποίο είναι κατάλληλο μόνο για εκτύπωση. Αν χρειαστεί να κάνεις πράξεις ή συγκρίσεις με αυτό θα αναγκαστείς να το μετατρέψεις πάλι σε DateTime, μαντεύοντας το σωστό format. Και μπορεί μεν εσύ, σε αυτή  την περίπτωση να ξέρεις ποιό είναι το format, αλλά κάποιος άλλος προγραμματιστής στο μέλλον, ή ακόμα κι εσύ ο ίδιος δεν θα θυμάται ποιό είναι το format. Τζιζζζζζζζζζζζ!

    Αντί να κάνεις τη μετατροπή στον SQL Server καλύτερα είναι να κάνεις τη μετατροπή στη σελίδα, είτε με μία απλή .ToString() είτε ορίζοντας κάποιο format string. Άσε που στη σελίδα μπορεί να γίνει αυτόματα μετατροπή στο κατάλληλο format ανάλογα με τη γλώσσα του χρήστη, ενώ κάτι τέτοιο είναι αδύνατον στον SQL Server.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems