كيف يمكنني التحويل من التقويم الغريغوري إلى وقت يونيكس ، في جافا؟

StackOverflow https://stackoverflow.com/questions/4018488

سؤال

أنا في حاجة إلى طريقة لتحويل كائن gregoriancalendar إلى وقت unix (أي لفترة طويلة). تحتاج أيضًا إلى طريقة لتحويل وقت UNIX (طويل) إلى كائن GregorianCalendar. هل هناك أي طرق تفعل هذا؟ إذا لم يكن كذلك ، فكيف أفعل ذلك؟ أي مساعدة سيكون موضع تقدير كبير.

رابط إلى فئة GregorianCalendar -> http://download.oracle.com/javase/1.4.2/docs/api/java/Util/greiancalend.html

شكرًا.

هل كانت مفيدة؟

المحلول

الاساليب getTimeInMillis() و setTimeInMillis(long) سوف تسمح لك بالوصول إلى الوقت وضبط الوقت بالمللي ثانية ، وهو الوقت الذي تصل إلى 1000 مرة. سيتعين عليك التكيف يدويًا نظرًا لأن Unix Time لا يشمل ميلي ثانية - ثوانٍ فقط.

long unixTime = gregCal.getTimeInMillis() / 1000;
gregCal.setTimeInMillis(unixTime * 1000);

جانبا: إذا كنت تستخدم التواريخ كثيرًا في تطبيقك ، خاصة إذا كنت تقوم بتحويل التواريخ أو باستخدام مناطق زمنية متعددة ، فإنني أوصي بشدة باستخدام ملف jodatime مكتبة. إنه كامل للغاية وأكثر طبيعية قليلاً لفهمه من نظام التقويم الذي يأتي مع Java.

نصائح أخرى

أعتقد أن gregoriancalendar.gettimeinmillis () و Gregoriancalendar.SettimeInmillis () سوف تسمح لك بالحصول على القيم الطويلة بالطريقة التي تريدها.

تحقق من وظائف SetTimeInmillis و GetTimeInmillis: http://download.oracle.com/javase/6/docs/api/java/util/calendar.html#gettimeinmillis()

يجب أن يكون Calendar.GetTimeInmillis () ما تبحث عنه.

TL ؛ د

myGregCal.toZonedDateTime().toEpochSecond()                     // Convert from troublesome legacy `GregorianCalendar` to modern `ZonedDateTime`.

والذهاب في الاتجاه الآخر ...

GregorianCalendar.from(                                         // Convert from modern `ZonedDateTime` to troublesome legacy class `GregorianCalendar`.
    Instant.ofEpochSecond( yourCountOfWholeSecondsSinceEpoch )  // Moment in UTC.
        .atZone(                                                // Apply `ZoneId` to `Instant` to produce a `ZonedDateTime` object.
            ZoneId.of( "Africa/Tunis" ) 
        )
)                                                              

تجنب فصول الموعد القديمة

الإجابات الأخرى صحيحة وقصيرة. ولكن ، لمعلوماتك ، فصول وقت التاريخ القديمة المزعجة مثل java.util.Date, java.util.Calendar, ، و java.text.SimpleDateFormat هم الان إرث, ، حل محله Java.Time فصول بنيت في Java 8 & Java 9.

لذا ، إليك كيفية تحويل الطبقات الحديثة واستخدامها بدلاً من مشكلتك.

Java.Time

تحويل من فئة Legacy GregorianCalendar إلى الطبقة الحديثة ZonedDateTime. استدعاء الطرق الجديدة التي تمت إضافتها إلى الفصول القديمة.

ZonedDateTime zdt = myGregCal.toZonedDateTime() ;

والذهاب في الاتجاه الآخر ...

GregorianCalendar myGregCal = GregorianCalendar.from( zdt ) ;

إذا "unix time" كنت تعني عددًا من الثواني الكاملة منذ مرجع العصر من اللحظة الأولى من عام 1970 في UTC ، 1970-01-01T00: 00: 00Z ، ثم اتصل toEpochSecond.

long secondsSinceEpoch = zdt.toEpochSecond() ;

إذا كنت قصدت عددًا من المللي ثانية منذ عام 1970 ، فقد بدأ في UTC ، ثم استخرج Instant. ال Instant يمثل الفصل لحظة على الجدول الزمني في التوقيت العالمي بقرار نانو ثانية (حتى تسعة (9) أرقام من الكسر العشري).

Instant instant = zdt.toInstant() ;

الآن اطلب عدد المللي ثانية.

long millisecondsSinceEpoch = instant.toEpochMill() ;

ضع في اعتبارك أن طلب ثواني كاملة أو ميلي ثانية قد تنطوي على فقدان البيانات. ال ZonedDateTime و Instant كلاهما عزم على النانو ثانية. لذلك أي microseconds أو سيتم تجاهل النانو ثانية التي قد تكون موجودة وأنت تحسب ثوانيك بالكامل أو ميلي ثانية.


عن Java.Time

ال Java.Time تم بناء إطار العمل في Java 8 وما بعده. هذه الفصول تحل محل القديم المزعج إرث فصول وقت التاريخ مثل java.util.Date, Calendar, & SimpleDateFormat.

ال وقت جودا مشروع ، الآن في نمط الصيانة, ، ينصح بالهجرة إلى Java.Time الطبقات.

لمعرفة المزيد ، انظر تعليمي أوراكل. والبحث في سعة مكدس للعديد من الأمثلة والتفسيرات. المواصفات JSR 310.

باستخدام سائق JDBC متوافق مع JDBC 4.2 أو في وقت لاحق ، يمكنك تبادل Java.Time الكائنات مباشرة مع قاعدة البيانات الخاصة بك. لا حاجة لسلاسل ولا جافا.

من أين تحصل على فصول java.time؟

  • Java SE 8, Java SE 9, ، و لاحقا
    • مدمج.
    • جزء من واجهة برمجة تطبيقات Java القياسية مع تنفيذ مجمعة.
    • يضيف Java 9 بعض الميزات والإصلاحات البسيطة.
  • Java SE 6 و Java SE 7
    • يتم تشغيل الكثير من وظائف Java.time إلى Java 6 و 7 In Threeten-Backport.
  • ذكري المظهر
    • إصدارات لاحقة من تطبيقات حزمة Android لفصول Java.time.
    • لنظام Android في وقت سابق ، Threetenabp يتكيف المشروع Threeten-Backport (المذكور أعلاه). يرى كيفية استخدام threetenabp ....

ال Threeten-extra يمتد المشروع Java.time مع فصول إضافية. هذا المشروع هو أرضية إثبات للإضافات المستقبلية المحتملة إلى Java.time. قد تجد بعض الفصول المفيدة هنا مثل Interval, YearWeek, YearQuarter, ، و أكثر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top