Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

POSTMAN mengembalikan bidang tanggal dengan nilai yang diubah

Postman tidak menambahkan apa pun ke JSON tanggapan dari server. Representasi tanggal yang diberikan ini dihasilkan oleh server dan ada masalah. Pertama, kita harus mulai dari bahwa Anda tidak boleh menggunakan java.util.Date karena Anda menggunakan Java8 . Ada java.time paket tersedia dan Anda harus menggunakannya untuk mewakili waktu.

toString metode dari Date class menggunakan zona waktu sistem default untuk mencetak tanggal dan Anda tidak boleh menggunakannya. java.time.LocalDateTime harus bekerja untuk Anda.

Mungkin layanan backend Anda menggunakan beberapa perpustakaan untuk menghasilkan JSON tanggapan. Misalnya, Jackson . Konfigurasinya bisa salah, inilah mengapa Anda melihat tanggal yang salah. Lihat kode di bawah ini:

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.ToString;

import java.io.IOException;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Date;
import java.util.TimeZone;

public class JsonTimeApp {
    public static void main(String[] args) throws IOException {
        LocalDateTime initialDate = LocalDateTime.of(2019, 3, 7, 0, 0, 0);
        LocalDateTime finalDate = LocalDateTime.of(2019, 9, 7, 23, 59, 59);

        ObjectMapper mapper = new ObjectMapper();
        mapper.enable(SerializationFeature.INDENT_OUTPUT);
        mapper.registerModule(new JavaTimeModule());
        mapper.setTimeZone(TimeZone.getTimeZone("GMT"));
        // or mapper.setTimeZone(TimeZone.getTimeZone("Etc/GMT-3"));

        mapper.writeValue(System.out, new Period(initialDate, Date.from(finalDate.toInstant(ZoneOffset.UTC))));
    }
}

@Data
@AllArgsConstructor
@ToString
class Period {

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private LocalDateTime initialDate;

    @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss")
    private Date finalDate;
}

Kode di atas dengan zona waktu diatur ke GMT cetakan:

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-07T23:59:59"
}

Tetapi ketika kita mengubah zona waktu menjadi Etc/GMT-3 , ia mencetak:

{
  "initialDate" : "2019-03-07T00:00:00",
  "finalDate" : "2019-09-08T02:59:59"
}

Anda harus memeriksa apa yang digunakan untuk menghasilkan JSON dalam kasus Anda dan konfigurasikan zona waktu dengan benar. Perhatikan, bahwa untuk initialDate kami tidak melihat perilaku ini karena kami menggunakan java.time.LocalDateTime kelas bukannya Date .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan saya perlu menggunakan titik koma vs garis miring di Oracle SQL?

  2. log pemicu oracle

  3. ORA-16789:log redo siaga tidak dikonfigurasi dengan benar

  4. Tabel Eksternal Oracle:Tata Letak File Datar Tingkat Lanjut

  5. Peramal. Kata kunci tidak ada saat menggunakan pernyataan kasus. Kesalahan 00905