"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > لماذا يتم إخراج SimpleDateFormat.parse بشكل مختلف عن المحدد عند تحويل الطوابع الزمنية لـ UNIX إلى تواريخ؟

لماذا يتم إخراج SimpleDateFormat.parse بشكل مختلف عن المحدد عند تحويل الطوابع الزمنية لـ UNIX إلى تواريخ؟

تم النشر بتاريخ 2024-11-09
تصفح:408

Why does SimpleDateFormat.parse output differently than specified when converting UNIX timestamps to dates?

مخرجات SimpleDateFormatter.parse بشكل مختلف عن المحدد

عند تحويل الطوابع الزمنية لنظام UNIX إلى تواريخ باستخدام SimpleDateFormat، قد تواجه اختلافات بين التنسيق المحدد والتنسيق المحدد الإخراج.

في المثال المحدد، الهدف هو تحويل الطابع الزمني لـ UNIX ("a1527069600") إلى تاريخ بالتنسيق "dd/MM/yyyy hh:mm:ss a". ومع ذلك، فإن استخدام SimpleDateFormatter.format متبوعًا بـ SimpleDateFormatter.parse يؤدي إلى نتائج مختلفة.

سبب التناقض

يحدث التناقض لأن SimpleDateFormatter.parse يتوقع سلسلة بالملف الدقيق التنسيق المحدد أثناء إنشاء مثيل ("dd/MM/yyyy hh:mm:ss a"). في هذه الحالة، يقوم SimpleDateFormatter.format بإخراج التاريخ بتنسيق مختلف عن تنسيق الإدخال المتوقع، مما يتسبب في فشل عملية التحليل.

الحل

لتجنب هذه المشكلة يوصى بعدم تمرير سلاسل التاريخ إلى قواعد بيانات MySQL. بدلاً من ذلك، استخدم كائنات التاريخ. توفر واجهة برمجة تطبيقات التاريخ والوقت الحديثة لـ Java، java.time، فئات مثل LocalDateTime التي تجعل التعامل مع التاريخ أسهل.

مثال:

String ep = "a1527069600";
long epoch = Long.parseLong(ep.substring(1));
Instant inst = Instant.ofEpochSecond(epoch);
LocalDateTime ldt = inst.atZone(ZoneId.of("Asia/Calcutta")).toLocalDateTime();

System.out.println(ldt.toString()); // Output: 2018-05-23T15:30

PreparedStatement ps = myDatabaseConnection.prepareStatement(
        "insert into my_table (my_date_time) values (?)");
ps.setObject(1, ldt);

يحول هذا الرمز الطابع الزمني لـ UNIX إلى LocalDateTime، والذي يمكن إدراجه مباشرة في قاعدة بيانات MySQL.

الاستنتاج:

باستخدام java.time وتمرير كائنات التاريخ بدلاً من السلاسل إلى MySQL، يمكنك التخلص من مشكلات التنسيق والتأكد من دقة تحويل التاريخ.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3