Проводить дату и час формат JSON PHP в Java

У меня есть этот JSON что приходит из одного PHP:

[{"id":101,"date":{"timezone":{"name":"Europe\/Berlin","location": {"country_code":"DE","latitude":52.5,"longitude":13.36666,"comments":"most locations"}},"offset":7200,"timestamp":1471212000},

Как я могу проводить эту дату в формате JSON в дату Java? Извлекать поля я умею делать это, что я не знаю, так это как использование их.

И если пора:

"time":{"timezone":{"name":"Europe\/Berlin","location":{"country_code":"DE","latitude":52.5,"longitude":13.36666,"comments":"most locations"}},"offset":3600,"timestamp":36000}

В вышеупомянутом случае мне неважна дата, важное состоит в том, чтобы проводить час Java.

Потом, что я получаю дату в Java: что я могу делать, чтобы показывать только дату в одном TextView? И показывать только час в одном TextView?

4
задан 01.06.2016, 20:51
3 ответа

Чтобы показывать дату в TextView, если у тебя есть дата в одной изменчивый тип String, или Восходите, ты можешь добавлять ее, таким образом:

Предполагая TextView внутри нашего layout:

<TextView
    android:id="@+id/textView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

Получается ссылка и добавляют текст:

//A partir del id del TextView.
TextView textView = (TextView)findViewById(R.id.textView);
//Agregas el texto, el cual puede ser una variable Date o String.
textView.setText(mifecha);

Относительно меняния формата, формат ты можешь решать это, например, если ты желаешь формат "yyyy-MM-dd hh:mm:ss":

//Seguramente obtendras un string del valor de timestamp, hay que convertirlo a long.
String miJSONTimeStamp = "1471212000";
Long miTimeStamp = Long.parseLong(miJSONTimeStamp);    

//Define formato de salida deseado.
String formatoDeseado = "yyyy-MM-dd hh:mm:ss";
SimpleDateFormat formatter = new SimpleDateFormat(formatoDeseado);

//Crea objeto para convertir millisegundos a fecha.
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(miTimeStamp);

//aplica formato
String fechaconFormat  = formatter.format(calendar.getTime());

//agrega texto con formato dentro del textView.
textView.setText(fechaconFormat);

Он будет иметься как результат:

introducir la descripción de la imagen aquí

Если ты желаешь только дату просто, определи ее внутри SimpleDateFormat

 String formatoDeseado = "yyyy-MM-dd";
 SimpleDateFormat formatter = new SimpleDateFormat(formatoDeseado);

introducir la descripción de la imagen aquí

Если ты желаешь только час также, определи ее внутри SimpleDateFormat

 String formatoDeseado = "HH:mm:ss";
 SimpleDateFormat formatter = new SimpleDateFormat(formatoDeseado);

introducir la descripción de la imagen aquí

Проверь, что ты желаешь формат:

http://developer.android.com/intl/es/reference/java/text/SimpleDateFormat.html

2
ответ дан 24.11.2019, 14:32
  • 1
    Твой ответ хороший, но не объясняет c и # 243; mo получать дату с JSON в Java:\ –  24.04.2016, 19:49
  • 2
    ohhh я подумал, что уже hab и # 237; в полученный дата в millisegundos!, сейчас я завершаю мой ответ с как получать дату с .json спасибо! – Jorgesys♦ 24.04.2016, 19:50
  • 3
    он говорит в вопросе: " xtraer поля это s и # 233; делать, что не s и # 233; это как использование их. и quot; – Jorgesys♦ 24.04.2016, 19:52
  • 4
    Tambi и # 233; n он говорит: В этом и #250; ltimo случай мне неважна дата, важное состоит в том, чтобы проводить час Java . Думаю я, что ответ состоит: понимая, что имеется стоимость даты / в час в переменной в клиенте (Java), 1) Обращать это в объект Date, 2) Использовать SimpleDateFormat, чтобы превращать эту дату / в час в цепь, 3) Показывать цепь в одном TextView (или где он был). Я это говорю, потому что дата не приходит в особенном формате а как миллисекунды (что в меня казаться не хорошо). –  24.04.2016, 19:54
  • 5
    у меня есть сомнение ты не должен умножать тебе оставило это соединение Привет, p.d: я удалю это сообщение jaja я забыл соединения ideone.com/IyKbBx – Angel Angel 25.04.2016, 06:34

Хороший, так как уже я считаю это осуществленным, но он не удается:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String json = "[{'date':{'timestamp':1144015200}, 'time':{'timestamp':36000}}]";
    long dateTimestamp = 0;
    long timeTimestamp = 0;


    try {
        JSONArray jsonArray = new JSONArray(json);
        JSONObject jsonObject = jsonArray.getJSONObject(0);

        JSONObject jsonObjectDate = jsonObject.getJSONObject("date");
        JSONObject jsonObjectTime =  jsonObject.getJSONObject("time");

        dateTimestamp = Long.parseLong(jsonObjectDate.getString("timestamp"));
        timeTimestamp = Long.parseLong(jsonObjectTime.getString("timestamp"));

        Log.i("Resultado", "date = " + dateTimestamp);
        Log.i("Resultado", "time = " + timeTimestamp);

    } catch (JSONException e) {
        e.printStackTrace();
    }

    String fechaTimestamp = String.valueOf(dateTimestamp);
    String formatoFecha = "d-MM-yyyy";
    SimpleDateFormat formatter = new SimpleDateFormat(formatoFecha);

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(dateTimestamp);

    String fechaConFormato = formatter.format(calendar.getTime());
    Log.i("Resultado", fechaConFormato);

    String formatoHora = "k:m:s";
    formatter = new SimpleDateFormat(formatoHora);

    calendar.setTimeInMillis(timeTimestamp);

    String horaConFormato = formatter.format(calendar.getTime());
    Log.i("Resultado", horaConFormato);
}

}

Результат: датируйте = 1144015200 украдите = 36000 14-01-1970 24:0:36

Дата, которая была бы должна выходить: 03-04-2006 и час 11:00:00.

Вам что-то приходит в голову? timestamp производит сервер, я не знаю, мог ли он производить их плохо. Другой выбор состоял бы в том, чтобы посылать пакет json с датой и часом как String, но тогда, как могла бы герметизировать в корпусе это в объекте дата Java.

Я сделал это доказательство:

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    String strFecha = "03-04-2006";
    Calendar calendar = GregorianCalendar.getInstance();
    Date fecha = calendar.getTime();
    SimpleDateFormat formatoDeFecha = new SimpleDateFormat("dd/MM/yyyy");
    Log.i("resultado", formatoDeFecha.format(fecha));
}

}

Но результат: 01.05.2016.

Я немного потерян этим :(

Спасибо за любую помощь, что вы смогли бросать меня.

Приветствие

0
ответ дан 24.11.2019, 14:32
  • 1
    Для в и # 241; adir больше informaci и # 243; n в Ваш вопрос, смоги видеть под Вашим вопросом иметь, издавать, закрывать, влечь за собой, когда могут соглашаться на то, чтобы издавать нажатый на, и изменяя Ваш вопрос, может копировать контент Вашего ответа, и прикреплять это внутри Вашего вопроса, despu и # 233; s смоги удалять этот ответ. Привет – Angel Angel 11.05.2016, 18:56

Предупреждение: Я вижу, что исчезли комментарии, если он прибывает в этот вопрос, чтобы применять это к Android, это не Ваш ответ так как первоначальный вопрос в mutado.

В этом соединении может видеть какие-то данные, чтобы делать проверки ect. http://www.epochconverter.com/timezones?q=1471212000&tz=America%2FNew_York


https://docs.oracle.com/javase/7/docs/api/java/util/Date.html

import java.util.Date;
import java.sql.Timestamp;

public static void main (String[] args) throws java.lang.Exception {


   Timestamp stamp = new Timestamp(1471212000);
   Date date_f = new Date(stamp.getTime() * 1000L);

        System.out.println(date_f.toString());
        System.out.println(date_f);
}

Метод toString применяет к себе часовую предопределенную зону JVM, для java.util. Дата у этого нет времени для зоны.


С java.time Вы можете манипулировать временем нескольких способов:

.

import java.time.ZoneOffset;
import java.time.OffsetDateTime;
import java.time.Instant;

import java.time.ZoneId;
import java.time.ZonedDateTime;

import java.time.format.DateTimeFormatter;

public static void main (String[] args) throws java.lang.Exception {

    Instant instant                  = Instant.now();
    ZoneOffset zone_offset           = ZoneOffset.of( "+01:00" );
    OffsetDateTime offeset_date_time = OffsetDateTime.ofInstant( instant , zone_offset );       

    System.out.println(instant.toString());
    System.out.println(offeset_date_time.toString());

    ZoneId zone_id = ZoneId.of( "America/Los_Angeles" ); // <- Mirar shortIds link
    ZonedDateTime zoned_date_time = ZonedDateTime.ofInstant( instant , zone_id );

    System.out.println(zoned_date_time.toString());

    //Formato ejemplo

    DateTimeFormatter formatterOutput = DateTimeFormatter.ISO_DATE_TIME; // <-- Mirar link DateTimeFormatter predefined
    String output = formatterOutput.format(zoned_date_time);
}

shortdIds Соединение

DateTimeFormatter predefined Соединение

https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html


Update:

Уже комментировал, что это могло бы происходить, в комментарии в ответе Elenasys, но я вновь помещаю это ему как update (вскоре после Вашего нового вопроса что конечно акцента комментарий, объясняя, как обновлять Ваш вопрос).

Результат: датируйте = 1144015200 украл = 36000 14-01-1970 24:0:36

Те Уникс epoch (or Unix украл or POSIX украдите or Unix timestamp) is the number of seconds.... 1471212000 seconds-> *1000L-> setTimeInMillis, ждал поймите, что я хочу сказать его, если ты не применяешь 1000 к setTimeInMillis, он отнесется к информации о равном способе и не имели 1000, так как ты датируешь ее, он отличается.

отнесся к следующему, в местах dondes используй setTimeInMillis(dateTimestamp):

.setTimeInMillis(dateTimestamp * 1000L);
0
ответ дан 24.11.2019, 14:32
  • 1
    совсем соединения на английском – rnrneverdies 24.04.2016, 19:16
  • 2
    @rnd всех соединений на английском уже это документация Oracle, я не вижу совсем не плохой в этом. Привет – Angel Angel 24.04.2016, 19:40
  • 3
    Ну, но это сайт в espa и # 241; ol. Быть должным и # 237; схвати переводить или объяснять в espa и # 241; ol фундаментальные части ответа. Иначе он in и # 250; til если только ты не будешь знать ingl и # 233; в. – rnrneverdies 24.04.2016, 19:43
  • 4
    и на соединении так как parace, что лучше, когда используются много классов в коде соединять для документации, но это также зависит от каждого и от желаний, которые у него есть или он думает, что он уместный. – Angel Angel 24.04.2016, 19:57
  • 5
    Мне кажется важным этот info, офсет и даже locale, чтобы определять форматы как " d и #39; и # 39; MMMM и #39; и # 39; yyyy" используя подходящий locale, как: new Locale (" es" " ES") – Jorgesys♦ 24.04.2016, 21:33