IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Silverlight Discussion :

culture et temps GMT


Sujet :

Silverlight

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut culture et temps GMT
    Bonjour,

    Dans mon application, les heures apparaissent toujours avec une heure de retard.

    Si j'encode une date et heure le 25/1/2010 à 17:15, il va bien me stocker cette valeur dans ma base de données par contre, dans n'importe quel text box, il affichera 25/1/2010 à 16:15.

    Dans ma main page, j'ai pourtant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim culture As New Globalization.CultureInfo("fr-FR")
    System.Threading.Thread.CurrentThread.CurrentCulture = culture
    et si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MessageBox.Show(System.Threading.Thread.CurrentThread.CurrentCulture.ToString)
    j'obtiens bien:
    fr-FR
    et ce sur toutes les pages de mon application

    Question subsidiaire, peut on définir une culture en XML pour qu'elle soit prise en charge pour une page seulement

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    C'est vraiment pas clair...

    Elle vient d'où ta date 25/1/2010 à 17:15 ?

    Ca veut dire quoi "dans n'importe quel text box, il affichera 25/1/2010 à 16:15." ?

    Comment tu mets la valeur dedans ?

    Sois clair s'il te plait.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Au moment ou je pousse sur le bouton ci-dessous, il me prend la date et l'heure de mon PC pour la mettre dans le champ "MyUserCreationDate" de ma table "MyTbl" de ma DB.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub OKButton_Click(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles OKButton.Click
            Try             CType(DataContext, MyTbl).MyUserName = txtName.Text
     
                           CType(DataContext, MyTbl).MyUserCreationDate = Date.Now
     
                       Catch ex As Exception
                MessageBox.Show(ex.Message.ToString)
                Return
            End Try
     
                End Sub
    Dans mon exemple, j'ai poussé le 25 janvier 2010 à 17h15 sur mon bouton. C'est d'ailleurs la date et l'heure que je retrouve dans ma table "MyTbl". Jusque là tout va bien.

    Le problème se produit quand dans une page XAML, dans un DataGrid ou un textBox, j'essaie d'afficher cette date que j'ai récupéré dans ma base de données.

    Dans le code suivant, ce n'est pas la date et l'heure exacte (25 janvier 2010 à 17h15 ) contenue dans ma db qui s'affiche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <data:DataGrid x:Name="GrilleContact" ItemsSource="{Binding Data, ElementName=MyTblDS}" AutoGenerateColumns="False" >
                                    <data:DataGrid.Columns>
                                        <data:DataGridTextColumn  Header="User Name" Binding="{Binding MyUserName}"  />
    									<data:DataGridTextColumn  Header="Creation Date" Binding="{Binding MyUserCreationDate }" />                                   
    								</data:DataGrid.Columns>
                                </data:DataGrid>
    mais bien 25 janvier 2010 à 16h15 (donc une heure de moins)

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    ma question est donc:

    Pourquoi l'heure affichée dans mon datagrid est-elle différente de celle que je récupère dans ma base de données ?

  5. #5
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Ta base de donnée est sur ton poste ou sur une autre machine ?

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci de t'intéresser à cette question qui est toujours d'actualité pour moi.

    Mes données sont sur une autre machine, mais comme je l'ai indiqué, dans ma base de données (SQLServer), à laquelle je peux également accéder en direct (hors silverlight), c'est bien la bonne heure qui est indiquée.

    Ma requête me ramène bien la bonne donnée, c'est dans le datagrid qu'il semble se baser sur un autre fuseau ou une autre culture.

  7. #7
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Golzinne,

    apparement le DataGrid ne prend pas en compte la culture du thread en compte qu'il soit CurrentCulture ou CurrentUICulture (même en la fixant comme tu l'as fait).

    Pour moi, le datagrid fixe toujours la date que je lui envoie mais au format US, alors que mon systeme est français et que le la currentCulture est bien "fr-FR" (en SL4B2 mais normalement en SL3 c'est la même chose). Pour contrer ce problème j'utilise normalement des Converters de DateTime.
    Dans ton cas il serait intéressant de découvrir pourquoi tu te retrouves avec une heure supplémentaire.

    Ton systeme est-il en US avec un fuseau horaire en conséquence ?

    Dans un premier temps, pourquoi ne pas faire un petit test et passer une liste de DateTime directement dans un DataGrid (sans passer par la DB) afin d'écarter définitivement la DB de la problématique.

  8. #8
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Tu trouveras la réponse au problème sur ce post je pense :

    http://www.developpez.net/forums/d87...r-cultureinfo/

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    this.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name);

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Merci pour tes efforts,

    J'ai mis dans le constructeur de ma page qui contient le datagrid:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Public Sub New()
            InitializeComponent()
            Me.Language = XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.Name)
    Quand je débogue, je vois bien que CurrentCulture.Name vaut "fr-FR".

    Mais rien n'y fait, les dates que je viens de créer ce samedi 13 à 0h42 s'affichent dans mon datagrid avec vendredi 12 à 23h42

    Je ne pense pas qu'il prenne l'heure US car je pense qu'il y aurait alors plus d'une heure de décalage, je tablerais plutôt pour nos voisins anglais...

  10. #10
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Peut être pourrais-tu reproduire le problème sur un mini-projet (sans appel à la base de donné, juste quelques DateTimes poussées dans le datagrid) et le joindre à ton post que l'on voit si ton environnement influe sur le resultat

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Oui, je prépare ça

  12. #12
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    quand je ne passe pas par la base de données (ou par le binding ?) ça fonctionne normalement.

    J'ai fait une page toute simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <navigation:Page xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"  
                     x:Class="xxx.testDate" 
               xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
               xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
               xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
               xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
               mc:Ignorable="d"
               xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
               d:DesignWidth="640" d:DesignHeight="480"
               xmlns:lang ="fr-FR"
               Title="testDate Page">
        <Grid x:Name="LayoutRoot">
            <data:DataGrid x:Name="testDataGrid" >
     
            </data:DataGrid>
     
        </Grid>
    </navigation:Page>
    et voici mon code vb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Partial Public Class testDate
        Inherits Page
     
        Public Sub New()
            InitializeComponent()
     
            Dim myFR_culture As New Globalization.CultureInfo("fr-FR")
     
            System.Threading.Thread.CurrentThread.CurrentCulture = myFR_culture
            System.Threading.Thread.CurrentThread.CurrentUICulture = myFR_culture
            FillList()
        End Sub
     
        'Executes when the user navigates to this page.
        Protected Overrides Sub OnNavigatedTo(ByVal e As System.Windows.Navigation.NavigationEventArgs)
     
        End Sub
     
        Private Sub FillList()
            Dim fp As IFormatProvider = New System.Globalization.CultureInfo("fr-FR")
            Dim dt As DateTime = DateTime.Parse("9 mars 2005 17:23:15", fp)
     
            Dim myListDate As New List(Of DateTime)
            myListDate.Add(dt)
            Me.testDataGrid.ItemsSource = myListDate
     
     
        End Sub
     
    End Class
    Dans mon testDataGrid j'ai la date "3/9/2005 5:23:15 PM"

    C'est le format US malgré mes efforts pour mettre mais au moins l'heure correspond à celle que je lui donne.

  13. #13
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Golzinne,

    Je ne suis pas sure d'avoir compris ton dernier post.
    La base de donnée distante est bien mise en cause alors?

  14. #14
    Membre éprouvé
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    876
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 876
    Par défaut
    Au contraire, le stockage de l'information se passe à la bonne heure. Non seulement je peux aller le vérifier dans la base de données, mais en plus j'ai transformé ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Function GetTestDateTbl() As IQueryable(Of testDateTbl)
            Dim aaa As IQueryable(Of testDateTbl)
            aaa = From myTest In Me.Context.testDateTbl
            Return aaa
        End Function
    et si je débogue sur le "Return aaa", j'ai bien "3/9/2005 5:23:15 PM".

    Le problème est donc soit dans le Binding, soit dans le datagrid, mais comme mon autre datagrid, ça s'affiche correctement, j'aurais tendance à croire que ça vient du Binding ?

  15. #15
    Membre Expert
    Avatar de Samuel Blanchard
    Homme Profil pro
    Expert .NET
    Inscrit en
    Février 2010
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France

    Informations professionnelles :
    Activité : Expert .NET

    Informations forums :
    Inscription : Février 2010
    Messages : 1 504
    Par défaut
    Ca me parait très étrange que cela vienne du binding.
    Mais j'avoue que je suis un peu perdu entre les tests en local ou non,...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/12/2013, 01h16
  2. Convertir un temps GMT vers time_t
    Par souviron34 dans le forum Télécharger
    Réponses: 0
    Dernier message: 30/11/2010, 16h22
  3. Conversion de temps gmt en time_t.
    Par piemur2000 dans le forum C
    Réponses: 4
    Dernier message: 22/01/2010, 13h02
  4. [MySQL] Récupérer le "vrai" temps GMT
    Par diabli73 dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 08/07/2009, 15h50
  5. Insertion automatique du temps GMT
    Par Mister Nono dans le forum SQL
    Réponses: 4
    Dernier message: 10/10/2007, 11h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo