Pertanyaan Axis2 - Format Tanggal


Skenario

Format tanggal yang dikeluarkan sebagai tanggapan terhadap klien Layanan Web oleh Axis2 diformat sebagai "2009-08-28 + 01: 00". Saya ingin mengubah ini agar hanya menampilkan tanggal tanpa informasi zona waktu (mis .:"2009-08-28 ")

Konfigurasi

Perpustakaan

Sumbu 2 1.4.1

WSDL

<xsd:element name="StartDate" type="xsd:date" />;

Pertanyaan

  • Apakah mungkin untuk mengubah format output, yang digunakan oleh Axis 2 untuk menulis informasi tanggal?
  • Dapatkah Anda melihat masalah apa pun untuk klien .NET yang mereformalkan konversi format tanggal ini?

Batasan

Sayangnya tidak mungkin mengubah elemen "StartDate" menjadi a xsd:string atau xsd:token


Penyempitan pertanyaan

Saat saya menggunakan xsd:date Tipe Data XML yang didefinisikan sebagai

[-]CCYY-MM-DD[Z|(+|-)hh:mm]

Jadi jika saya mengatur

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("UTC");
...

maka hasilnya terlihat seperti ini

2009-01-28Z

Anda dapat mengganti "UTC" oleh "GMT" atau "".

Bisakah saya menyingkirkan "Z"?


7
2017-08-28 11:24


asal


Jawaban:


Masalahnya disebabkan oleh penggunaan objek Kalender sebagai nilai sumber untuk xsd: bidang tanggal. Ketika Anda mendapatkan contoh Kalender selalu berjalan dengan zona waktu (zona waktu default digunakan jika tidak ditentukan secara eksplisit). Untuk menghapus penggunaan zona waktu, hapus () metode dan pulihkan semua bidang kecuali zona waktu. Kemudian XML pemetaan perpustakaan (saya diuji dengan XmlBeans, tapi saya pikir itu juga berlaku untuk perpustakaan mengikat lainnya yang didukung oleh Axis) menghasilkan XML tanpa akhiran zona waktu.

Calendar myDate = Calendar.getInstance();   // returns GregorianCalendar
Calendar now = (Calendar)myDate.clone();    // save current timestamp
myDate.clear(); // this clears the fields, including Calendar.ZONE_OFFSET
myDate.set(     //set all fields back from the saved copy
    now.get(Calendar.YEAR),
    now.get(Calendar.MONTH),
    now.get(Calendar.DAY_OF_MONTH),
    now.get(Calendar.HOUR_OF_DAY),
    now.get(Calendar.MINUTE),
    now.get(Calendar.SECOND)
);

5
2018-06-12 13:57



Saya memiliki masalah yang sama dan mungkin untuk menghapus zona waktu dari tanggal!

Anda dapat menggunakan ConvertUtil yang Anda buat sendiri.

Pada awalnya Anda harus membuat kelas dengan metode / metode konversi terkustomisasi Anda:

public class myConvertUtil extends org.apache.axis2.databinding.utils.ConverterUtil
    {
    public static String convertToString(Date value)
        {
        // return customized Date format
        }
    }

Maka Anda harus menetapkan kelas ini sebagai SYSTEM_PROPERTY_ADB_CONVERTERUTIL:

String convert_class = "com.firm.myConvertUtil";
System.setProperty(ConverterUtil.SYSTEM_PROPERTY_ADB_CONVERTERUTIL, convert_class);

8
2018-03-30 09:11



Anda tidak bisa.

Ruang nilainya digambarkan sebagai kombinasi tanggal dan waktu dalam Bab 5.4 ISO 8601. Ruang leksikalnya adalah format tambahan:

[-] CCYY-MM-DDThh: mm: ss [Z | (+ | -) hh: mm]

Zona waktu dapat ditetapkan sebagai Z (UTC) atau (+ | -) hh: mm. Zona waktu yang tidak ditentukan dianggap belum ditentukan.

http://books.xmlschemata.org/relaxng/ch19-77049.html

Edit:

Untuk referensi lihat XML Schema Part 2: Datatypes Second Edition 3.2.7 dateTime


0
2017-08-28 11:26



Ada Kalender # metode yang jelas yang akan mencapai apa yang Anda butuhkan. Untuk menghilangkan offset zona waktu, lakukan hal berikut:

cal.clear (Calendar.ZONE_OFFSET);

Perhatikan bahwa waktu tanpa offset zona waktu tidak jelas. Ini meninggalkan konsumen saat itu untuk menebak offset UTC.


0
2018-01-30 17:26