У меня есть этот 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
?
Чтобы показывать дату в 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);
Он будет иметься как результат:
Если ты желаешь только дату просто, определи ее внутри SimpleDateFormat
String formatoDeseado = "yyyy-MM-dd";
SimpleDateFormat formatter = new SimpleDateFormat(formatoDeseado);
Если ты желаешь только час также, определи ее внутри SimpleDateFormat
String formatoDeseado = "HH:mm:ss";
SimpleDateFormat formatter = new SimpleDateFormat(formatoDeseado);
Проверь, что ты желаешь формат:
http://developer.android.com/intl/es/reference/java/text/SimpleDateFormat.html
Хороший, так как уже я считаю это осуществленным, но он не удается:
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.
Я немного потерян этим :(
Спасибо за любую помощь, что вы смогли бросать меня.
Приветствие
Предупреждение: Я вижу, что исчезли комментарии, если он прибывает в этот вопрос, чтобы применять это к 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
Вы можете манипулировать временем нескольких способов:
Instant
ZoneOffset
- OffsetDateTime
ZoneId
- ZonedDateTime
.
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);
}
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);
Date
, 2) ИспользоватьSimpleDateFormat
, чтобы превращать эту дату / в час в цепь, 3) Показывать цепь в одномTextView
(или где он был). Я это говорю, потому что дата не приходит в особенном формате а как миллисекунды (что в меня казаться не хорошо). – 24.04.2016, 19:54