Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    [C#] Calcolo giorni con date in textbox (Windows Phone)

    Salve a tutti, sto creando una mia app per economia aziendale per windows phone, l'ho quasi finita, mi manca solo il calcolo dei giorni di due date in input in due textbox..

    Però non ho idea di come fare, leggevo del datetime ma ho solo peggiorato le cose, in pascal lo facevo tramite due costanti e un ciclo for, ma in visual c non ho idea..

    Mi potete aiutare?

  2. #2
    Puoi usare la funzione Subtract del tipo DateTime, che ti restituisce una struttura TimeSpan. Da questo oggetto puoi ricavare il numero di giorni trascorsi tra le due date.
    codice:
    DateTime d1 = DateTime.Parse(textBox1.Text);
    DateTime d2 = DateTime.Parse(textBox2.Text);
    
    TimeSpan ts = d1.Subtract(d2);
    
    Console.WriteLine(ts.Days);
    Chi non cerca trova.

  3. #3
    Grazie mille!!

    È proprio quello che ho scritto io durante informatica.. Tranne l'ultima istruzione.. Non sapevo che la variabile che prende la sottrazione aveva il formato di data..

    Grazie mille ancora!

    EDIT: ho un dubbio, in che formato deve essere inserita la data nei textbox? Va bene gg/mm/aaaa oppure aaaa/mm/gg?

  4. #4
    Non va.. Questo è nell'evento button_click

    codice:
    textBlock36.FontSize = 55; 
    string d3 = textBox10.Text.Replace(("."), ("/")).Replace(("/"), ("")).Replace(("/"), (""));
    DateTime d1 = Convert.ToDateTime(d3); 
    string d4 = textBox11.Text.Replace(("."), ("/")).Replace(("/"), ("")).Replace(("/"), (""));
    DateTime d2 = Convert.ToDateTime(d4); 
    TimeSpan ts = d1.Subtract(d2); 
    string giorni = ts.Days.ToString(); 
    textBox2.Text = giorni; 
    textBlock36.Text = giorni;
    Nel textblock e nel textbox non visualizza niente, non capisco perchè pero, o non converte la stringa in un datetime oppure il timespan.. :S

  5. #5
    Togli tutti quei Replace e riprova inserendo nei textbox le date scritte nel formato del tuo PC (se hai un Windows localizzato italiano e non hai modificato nulla nelle impostazioni internazionali dovrebbe essere gg/mm/aaaa).
    Chi non cerca trova.

  6. #6
    Purtroppo ho windows 8 Developer Preview in Inglese, ma visual studio è in italiano, quindi lo legge come se fosse mm/gg/aaaa?

    Comunque i replace non so se posso toglierli perchè, usando la tastiera number e non quella standard, non c'è lo slash, ma solo il punto, la virgola e il trattino

  7. #7
    Mi sono sbagliato, nel tuo caso la conversione della data dipende dalle impostazioni dell'emulatore, non di Windows. In ogni caso quella serie di replace non vanno proprio bene, supponendo di inserire la data di oggi accade che:
    data inserita: 19.01.2012
    dopo il 1° replace diventa: 19/01/2012
    dopo il 2° replace diventa: 19012012
    Il terzo replace non ha di per se alcun senso e non altera ulteriormente la stringa.
    Con quel valore passato al Convert è evidente che il sistema non lo riconosca come data.

    Mi viene il dubbio che tu non conosca molto bene l'uso del metodo Replace. Ti bastava scrivere:
    codice:
    string d3 = textBox10.Text.Replace(("."), ("/"));
    Chi non cerca trova.

  8. #8
    Funziona ora ovviamente..

    Scusa veramente per il disturbo, non mi ero accorto dell'eresia che avevo scritto -.-"

    Grazie infinite

  9. #9
    Scusa se ti rompo ancora, ma sto avendo problemi con la gestione delle eccezioni del calcolo dei giorni in cui mi hai aiutato.

    Ho scritto tutto il codice per l'accettazione dei giorni ma mi si blocca proprio all'inizio, a questo if, che risulta falso e quindi fa apparire un messagebox di errore.

    codice:
    String Data1 = textBox10.Text; 
    String Data2 = textBox11.Text; 
    if (Data1[3] == '.' && Data1[6] == '.')
    il codice dell'if è questo, essendo la lunghezza massimo del primo textbox 10, in teoria nel textbox dovrebbe essere inserita una data nel formato gg.mm.aaaa, ma non va.. ho fatto alcune prove per assegnare al textblock proprio data1[3] + data1[6] ed esce 114 con la data 99.99.9999 O.O

    non capisco, in delphi una stringa è trattata come un vettore di char, in c# no?

  10. #10
    Utente di HTML.it L'avatar di Vinsent
    Registrato dal
    May 2011
    Messaggi
    314
    L' indice parte da 0:
    stringa: pippo
    indice: p = 0, i = 1, p = 2, ecc.

    Comunque io in vb uso un usercontrol per evitare l'inserimento di caratteri non consentiti e per convertire la data nel formato "dd/mm/yyyy".
    Nell' esempio sotto sono accettati solo i caratteri da 0 a 9, /(shift+7), il punto e il tasto DEL. Le date inserite nel formato "ddMMyyyy", "ddMMyy", "dd.MM.yy", "dd.MM.yyyy" vengono convertite nel formato "dd/mm/yyyy" con l' evento Validating.
    Vedi tu se può esserti utile:
    codice:
    Public Class tbox_mod
    
        Inherits System.Windows.Forms.TextBox
    
        Protected Overrides Function ProcessCmdKey(ByRef msg As System.Windows.Forms.Message, ByVal keyData As System.Windows.Forms.Keys) As Boolean
            Console.WriteLine(keyData)
            Select Case keyData
                Case 48 To 57, 8, 190, 65591
                    'aggiungere gestione tooltip
                Case Else
                    'aggiungere gestione tooltip
                    msg = Nothing
            End Select
            Return MyBase.ProcessCmdKey(msg, keyData)
        End Function
    
        Private Sub validazione(sender As Object, e As System.ComponentModel.CancelEventArgs) Handles Me.Validating
            If Me.Text = "" Then
                'aggiungere gestione tooltip
                Return
            End If
            Dim dataconv As String = Me.Text
            Try
                Dim formats As String() = New String() {"ddMMyyyy", "ddMMyy", "dd.MM.yy", "dd.MM.yyyy"}
                Dim result = DateTime.ParseExact(dataconv, formats, System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None)
                Me.Text = CStr(result)
                'aggiungere gestione tooltip
            Catch ex As System.Exception
                'aggiungere gestione tooltip
                Console.WriteLine(ex.Message)
                e.Cancel = True
            End Try
        End Sub
    End Class

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.