Italian formattare una stringa

Nikeddy

Active Member
Licensed User
ora ho un problema (formattazione stringa) estraggo un valore DATA
tl.First = m.Get("data")
e lo metto nella riga, solo che mi esce la data in formato inglese, e soprattutto con 0:00:00 che sono i minuti.
come faccio a trasformarlo in data breve?
 

MarcoRome

Expert
Licensed User
Vedi
B4X:
DateTime.DateFormat = "dd/MM/yyyy HH:mm:ss"
Dim ticks As Long = DateTime.DateParse("05/08/2016 2:11:44")
Log(DateTime.Date(ticks))
 

zakker

Member
Licensed User
Ad esempio puoi mettere nel modulo "Starter" in "Service_Create"

DateTime.DateFormat="dd/MM/yyyy"
DateTime.TimeFormat="HH:mm"

Così stabilisci un formato di default per date e orari per l'app, senza doverti preoccupare di doverla formattare ogni volta che ti serve

Io per le date, visto che sono una rottura di scatole gestirle,soprattutto nei DB, uso il formato "yyyyMMdd"
 

Nikeddy

Active Member
Licensed User
io prendo da una query la data e la metto in una lbl_data

come la adatto alle due soluzioni da voi suggerite?
 

Nikeddy

Active Member
Licensed User
ho provato cosi

For i = 0 To totano.Size - 1
Dim m As Map
m = totano.Get(i)
Dim tl As TwoLines
Dim dataano As String
dataano = m.Get("data")
tl.First = DateTime.DateParse(dataano)
tl.Second = m.Get("descrizioneanomalia")
lst_anomalie.AddTwoLines2(tl.First, tl.Second, tl)
Next

ma non va
 

MarcoRome

Expert
Licensed User
DateParse restituisce un long tl.First cos'è ?
Suggerimento: oltre a dire non va riporta l'errore vedi finestra Log ( è sempre più chiaro )
 

Nikeddy

Active Member
Licensed User
tl.first è la prima riga della listbox

ub ListView1_ItemClick (Position As Int, Value As Object)
Dim tl As TwoLines
tl = Value
lblCountry.Text = tl.First
park = lblCountry.Text
lblPopulation.Text = "Calling server..."
ExecuteRemoteQuery("SELECT tot_euro FROM Elenco WHERE n_macchina='" & tl.First & "'", COUNTRY_POPULATION)
End Sub
 

Nikeddy

Active Member
Licensed User
scusa..

ecco il log

Response from server: [{"data":"2016-04-13 00:00:00","descrizioneanomalia":".1. non raggiungibile"},{"data":"2016-11-15 00:00:00","descrizioneanomalia":".1. non raggiungibile"}]
 

udg

Expert
Licensed User
è proprio il datatime.dateparse che da problemi.
Provo ad intuire.. hai settato DateTime.DateFormat="dd/MM/yyyy" in Starter o comunque prima di eseguire la SELECT e di conseguenza datatime.dateparse restituisce errore.
Se questo è il caso, dovresti settare Datetime.DateFormat come anno-mese-giorno prima del parsing di quanto ricavato dalla SELECT, poi cambiarlo in giorno-mese-anno in modo che Datetime.Date ti restituisca una data in formato "italiano" per la label.
 

Nikeddy

Active Member
Licensed User
e se per esempio formatto la stringa?
tl.First = m.Get("data")

su vb mi ricordo facevo tipo tl.first = m.get Format("dd:mm:YY") "data") tipo cosi .
 

Nikeddy

Active Member
Licensed User
manca proprio la funzione FORMAT

Dim data As String
data = Format(Now(), "d/MMMM/yyyy")
MsgBox(data)
 

sirjo66

Well-Known Member
Licensed User
nel linguaggio VB quando devi formattare una data lo puoi fare direttamente nella riga del format, coma fai ad esempio con
data = Format(Now(), "d/MMMM/yyyy")

Ma in B4A non lo puoi fare su una sola riga, lo devi fare con due righe di codice, prima cioè devi impostare il formato che vuoi, e solo dopo puoi convertire la data in stringa.
La stessa cosa quando deve fare il parse di una data, prima devi impostare il formato e poi esegui il parse.
Ad esempio, per convertire una stringa in data:
B4X:
Valore = "2016-04-13 00:00:00" ' ad esempio lo hai letto dal DB
DateTime.DateFormat = "yyyy-MM-dd HH:mm:ss" ' imposto il format corretto
Dim Data As Long = DateTime.DateParse(Valore)
Altro esempio poi per trasformare la data in stringa nel formato dd/mm/yyyy:
B4X:
DateTime.DateFormat = "dd/MM/yyyy" ' imposto il format corretto
Dim DataStr As String = DateTime.Date(Valore)
 

Nikeddy

Active Member
Licensed User
B4X:
Case anomalie

Dim totano As List

lst_anomalie.Clear

totano = parser.NextArray
For i = 0 To totano.Size - 1
Dim m As Map
m = totano.Get(i)
Dim tl As TwoLines
Dim valore As String
valore = m.Get("data")
DateTime.DateFormat = "yyyy-MM-dd" ' imposto il format corretto
Dim DataStr As String = DateTime.Date(valore)
tl.First = DataStr
tl.Second = m.Get("descrizioneanomalia")
lst_anomalie.AddTwoLines2(tl.First, tl.Second, tl)
Next
mi da errore:

An error occurred:
(Line: 161) Dim DataStr As String = DateTime.Date(valore)
java.lang.NumberFormatException: For input string: "2016-04-13 00:00:00"
 

sirjo66

Well-Known Member
Licensed User
nel codice che hai postato vedo che leggi i dati dal database, e con la linea
valore = m.Get("data")
ti ricavi "valore" che corrisponde al campo "data" del Map, però in quel momento "valore" è una stringa, ad esempio "2017-02-27"
per trasformarla in una variabile di tipo "data" devi usare DateTime.DateParse tu invece hai usato DateTime.Date che fa il contrario

Sergio

Penso che il codice corretto potrebbe essere:
B4X:
Case anomalie

Dim totano As List

lst_anomalie.Clear

totano = parser.NextArray
For i = 0 To totano.Size - 1
    Dim m As Map = totano.Get(i)
    Dim valore As String = m.Get("data")
    DateTime.DateFormat = "yyyy-MM-dd"
    Dim DataLng As Long = DateTime.DateParse(valore)
    DateTime.DateFormat = "dd/MM/yyyy"
    Dim tl As TwoLines
    tl.First = DateTime.Date(DataLng)
    tl.Second = m.Get("descrizioneanomalia")
    lst_anomalie.AddTwoLines2(tl.First, tl.Second, tl)
Next
 
Last edited:

Nikeddy

Active Member
Licensed User
e se fosse numerica? se la stringa e' numerica? se io divido 2 numeri esce con 400 decimali.

per impostarlo a 1 sola cifra decimale?
 
Top