سؤال

ما هي أفضل طريقة لتحويل ملف String في التنسيق "2 يناير 2010" إلى أ Date في جافا؟

في نهاية المطاف ، أريد أن أخرج الشهر واليوم والسنة كمناسبين حتى أتمكن من استخدام

Date date = new Date();
date.setMonth()..
date.setYear()..
date.setDay()..
date.setlong currentTime = date.getTime();

لتحويل التاريخ إلى الوقت.

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

المحلول

هذه هي الطريقة الصعبة ، وتلك java.util.Date تم إهمال طرق Setter منذ Java 1.1 (1997). ببساطة تنسيق التاريخ باستخدام SimpleDateFormat باستخدام نمط تنسيق يطابق سلسلة الإدخال.

في حالتك المحددة من "2 يناير 2010" كسلسلة الإدخال:

  1. "يناير" هو شهر النص الكامل ، لذا استخدم MMMM نمط لذلك
  2. "2" هو يوم الشهر القصير ، لذلك استخدم d نمط لذلك.
  3. "2010" هي السنة المكونة من 4 أرقام ، لذا استخدم yyyy نمط لذلك.

String string = "January 2, 2010";
DateFormat format = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH);
Date date = format.parse(string);
System.out.println(date); // Sat Jan 02 00:00:00 GMT 2010

لاحظ أهمية الصريح Locale جدال. إذا حذفت ذلك ، فسيستخدم اللغة الافتراضية وهو ليس بالضرورة الإنجليزية كما هو مستخدم في اسم الشهر لسلسلة الإدخال. إذا لم تتطابق اللغة مع سلسلة الإدخال ، فستحصل على مربك java.text.ParseException على الرغم من أن نمط التنسيق يبدو صالحًا.

إليك مقتطف من الأهمية من جافادوك, ، سرد جميع أنماط التنسيق المتاحة:

Letter  Date or Time Component  Presentation        Examples
------  ----------------------  ------------------  -------------------------------------
G       Era designator          Text                AD
y       Year                    Year                1996; 96
Y       Week year               Year                2009; 09
M/L     Month in year           Month               July; Jul; 07
w       Week in year            Number              27
W       Week in month           Number              2
D       Day in year             Number              189
d       Day in month            Number              10
F       Day of week in month    Number              2
E       Day in week             Text                Tuesday; Tue
u       Day number of week      Number              1
a       Am/pm marker            Text                PM
H       Hour in day (0-23)      Number              0
k       Hour in day (1-24)      Number              24
K       Hour in am/pm (0-11)    Number              0
h       Hour in am/pm (1-12)    Number              12
m       Minute in hour          Number              30
s       Second in minute        Number              55
S       Millisecond             Number              978
z       Time zone               General time zone   Pacific Standard Time; PST; GMT-08:00
Z       Time zone               RFC 822 time zone   -0800
X       Time zone               ISO 8601 time zone  -08; -0800; -08:00

لاحظ أن الأنماط حساسة للحالة وأن الأنماط القائمة على النص لأربعة أحرف أو أكثر تمثل النموذج الكامل ؛ وإلا يتم استخدام نموذج قصير أو مختصر إذا كان متاحًا. على سبيل المثال MMMMM أو أكثر غير ضروري.

فيما يلي بعض الأمثلة على صالحة SimpleDateFormat أنماط لتحليل سلسلة معينة حتى الآن:

Input string                            Pattern
------------------------------------    ----------------------------
2001.07.04 AD at 12:08:56 PDT           yyyy.MM.dd G 'at' HH:mm:ss z
Wed, Jul 4, '01                         EEE, MMM d, ''yy
12:08 PM                                h:mm a
12 o'clock PM, Pacific Daylight Time    hh 'o''clock' a, zzzz
0:08 PM, PDT                            K:mm a, z
02001.July.04 AD 12:08 PM               yyyyy.MMMM.dd GGG hh:mm aaa
Wed, 4 Jul 2001 12:08:56 -0700          EEE, d MMM yyyy HH:mm:ss Z
010704120856-0700                       yyMMddHHmmssZ
2001-07-04T12:08:56.235-0700            yyyy-MM-dd'T'HH:mm:ss.SSSZ
2001-07-04T12:08:56.235-07:00           yyyy-MM-dd'T'HH:mm:ss.SSSXXX
2001-W27-3                              YYYY-'W'ww-u

ملاحظة مهمة هي ذلك SimpleDateFormat هو ليس موضوع آمن. بمعنى آخر ، يجب ألا تعلن أبدًا وتعيينه كمتغير ثابت أو مثيل ثم إعادة استخدامه من طرق/مؤشرات ترابط مختلفة. يجب عليك دائمًا إنشاء علامة تجارية جديدة ضمن النطاق المحلي للأسلوب.


تحديث Java 8

إذا كنت على جافا 8 أو الأحدث ، فاستخدم DateTimeFormatter (هنا أيضًا ، انقر على الرابط لرؤية جميع التنسيقات المحددة مسبقًا وأنماط التنسيق المتاحة ؛ البرنامج التعليمي متاح هنا). هذا API الجديد مستوحى من jodatime.

String string = "January 2, 2010";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM d, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(string, formatter);
System.out.println(date); // 2010-01-02

ملاحظة: إذا كان نمط التنسيق الخاص بك يحتوي على الجزء الزمني أيضًا ، فاستخدمه LocalDateTime#parse(text, formatter) بدلاً من LocalDate#parse(text, formatter). وإذا كان نمط التنسيق الخاص بك يحتوي على المنطقة الزمنية أيضًا ، فاستخدمه ZonedDateTime#parse(text, formatter) في حين أن.

إليك مقتطف من الأهمية من جافادوك, ، سرد جميع أنماط التنسيق المتاحة:

Symbol  Meaning                     Presentation  Examples
------  --------------------------  ------------  ----------------------------------------------
G       era                         text          AD; Anno Domini; A
u       year                        year          2004; 04
y       year-of-era                 year          2004; 04
D       day-of-year                 number        189
M/L     month-of-year               number/text   7; 07; Jul; July; J
d       day-of-month                number        10

Q/q     quarter-of-year             number/text   3; 03; Q3; 3rd quarter
Y       week-based-year             year          1996; 96
w       week-of-week-based-year     number        27
W       week-of-month               number        4
E       day-of-week                 text          Tue; Tuesday; T
e/c     localized day-of-week       number/text   2; 02; Tue; Tuesday; T
F       week-of-month               number        3

a       am-pm-of-day                text          PM
h       clock-hour-of-am-pm (1-12)  number        12
K       hour-of-am-pm (0-11)        number        0
k       clock-hour-of-am-pm (1-24)  number        0

H       hour-of-day (0-23)          number        0
m       minute-of-hour              number        30
s       second-of-minute            number        55
S       fraction-of-second          fraction      978
A       milli-of-day                number        1234
n       nano-of-second              number        987654321
N       nano-of-day                 number        1234000000

V       time-zone ID                zone-id       America/Los_Angeles; Z; -08:30
z       time-zone name              zone-name     Pacific Standard Time; PST
O       localized zone-offset       offset-O      GMT+8; GMT+08:00; UTC-08:00;
X       zone-offset 'Z' for zero    offset-X      Z; -08; -0830; -08:30; -083015; -08:30:15;
x       zone-offset                 offset-x      +0000; -08; -0830; -08:30; -083015; -08:30:15;
Z       zone-offset                 offset-Z      +0000; -0800; -08:00;

لاحظ أنه يحتوي على عدة التنسيقات المحددة مسبقا للأنماط الأكثر شعبية. لذا بدلاً من مثل DateTimeFormatter.ofPattern("EEE, d MMM yyyy HH:mm:ss Z", Locale.ENGLISH);, ، يمكنك استخدام DateTimeFormatter.RFC_1123_DATE_TIME. هذا ممكن لأنهم ، على عكس ذلك SimpleDateFormat, ، موضوع آمن. يمكنك بالتالي تحديد خاص بك ، إذا لزم الأمر.

لتنسيق سلسلة إدخال معينة ، لا تحتاج إلى استخدام صريح DateTimeFormatter: معيار ISO 8601 التاريخ ، مثل 2016-09-26T17: 44: 57Z ، يمكن تحليلها مباشرة مع LocalDateTime#parse(text) لأنه يستخدم بالفعل ISO_LOCAL_DATE_TIME التنسيق. بصورة مماثلة، LocalDate#parse(text) يمتلك تاريخ ISO بدون مكون الوقت (انظر ISO_LOCAL_DATE)، و ZonedDateTime#parse(text) يمتلك تاريخ ISO مع الإزاحة وإضافة منطقة زمنية (انظر ISO_ZONED_DATE_TIME).

نصائح أخرى

آه نعم مناقشة تاريخ جافا ، مرة أخرى. للتعامل مع معالجة التاريخ التي نستخدمها تاريخ, تقويم, التقويم الميلادي, ، و SimpleDateFormat. على سبيل المثال باستخدام تاريخ يناير الخاص بك كمدخلات:

Calendar mydate = new GregorianCalendar();
String mystring = "January 2, 2010";
Date thedate = new SimpleDateFormat("MMMM d, yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));

ثم يمكنك معالجة ذلك بشيء مثل:

Calendar now = Calendar.getInstance();
mydate.set(Calendar.YEAR,2009);
mydate.set(Calendar.MONTH,Calendar.FEBRUARY);
mydate.set(Calendar.DAY_OF_MONTH,25);
mydate.set(Calendar.HOUR_OF_DAY,now.get(Calendar.HOUR_OF_DAY));
mydate.set(Calendar.MINUTE,now.get(Calendar.MINUTE));
mydate.set(Calendar.SECOND,now.get(Calendar.SECOND));
// or with one statement
//mydate.set(2009, Calendar.FEBRUARY, 25, now.get(Calendar.HOUR_OF_DAY), now.get(Calendar.MINUTE), now.get(Calendar.SECOND));
System.out.println("mydate -> "+mydate);
System.out.println("year   -> "+mydate.get(Calendar.YEAR));
System.out.println("month  -> "+mydate.get(Calendar.MONTH));
System.out.println("dom    -> "+mydate.get(Calendar.DAY_OF_MONTH));
System.out.println("dow    -> "+mydate.get(Calendar.DAY_OF_WEEK));
System.out.println("hour   -> "+mydate.get(Calendar.HOUR));
System.out.println("minute -> "+mydate.get(Calendar.MINUTE));
System.out.println("second -> "+mydate.get(Calendar.SECOND));
System.out.println("milli  -> "+mydate.get(Calendar.MILLISECOND));
System.out.println("ampm   -> "+mydate.get(Calendar.AM_PM));
System.out.println("hod    -> "+mydate.get(Calendar.HOUR_OF_DAY));
String str_date = "11-June-07";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("dd-MMM-yy");
date = formatter.parse(str_date);

مع Java 8 نحصل على تاريخ / وقت جديد (API) (JSR 310).

يمكن استخدام الطريقة التالية لتحليل التاريخ في Java 8 دون الاعتماد عليها وقت جودا:

 String str = "January 2nd, 2010";

// if we 2nd even we have changed in pattern also it is not working please workout with 2nd 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMMM Q, yyyy", Locale.ENGLISH);
LocalDate date = LocalDate.parse(str, formatter);

// access date fields
int year = date.getYear(); // 2010
int day = date.getDayOfMonth(); // 2
Month month = date.getMonth(); // JANUARY
int monthAsInt = month.getValue(); // 1

محلي هي فئة Java 8 القياسية لتمثيل تاريخ (بدون وقت). إذا كنت ترغب في تحليل القيم التي تحتوي على معلومات تاريخ ووقت يجب أن تستخدمها محلي. للقيم مع استخدام المناطق الزمنية ZonedDatetime. كلاهما يوفر أ parse() طريقة مشابهة ل LocalDate:

LocalDateTime dateWithTime = LocalDateTime.parse(strWithDateAndTime, dateTimeFormatter);
ZonedDateTime zoned = ZonedDateTime.parse(strWithTimeZone, zoneFormatter);

قائمة تنسيق الأحرف من DateTimeFormatter Javadoc:

All letters 'A' to 'Z' and 'a' to 'z' are reserved as pattern letters. 
The following pattern letters are defined:

Symbol  Meaning                     Presentation      Examples
------  -------                     ------------      -------
 G       era                         text              AD; Anno Domini; A
 u       year                        year              2004; 04
 y       year-of-era                 year              2004; 04
 D       day-of-year                 number            189
 M/L     month-of-year               number/text       7; 07; Jul; July; J
 d       day-of-month                number            10

 Q/q     quarter-of-year             number/text       3; 03; Q3; 3rd quarter
 Y       week-based-year             year              1996; 96
 w       week-of-week-based-year     number            27
 W       week-of-month               number            4
 E       day-of-week                 text              Tue; Tuesday; T
 e/c     localized day-of-week       number/text       2; 02; Tue; Tuesday; T
 F       week-of-month               number            3

 a       am-pm-of-day                text              PM
 h       clock-hour-of-am-pm (1-12)  number            12
 K       hour-of-am-pm (0-11)        number            0
 k       clock-hour-of-am-pm (1-24)  number            0

 H       hour-of-day (0-23)          number            0
 m       minute-of-hour              number            30
 s       second-of-minute            number            55
 S       fraction-of-second          fraction          978
 A       milli-of-day                number            1234
 n       nano-of-second              number            987654321
 N       nano-of-day                 number            1234000000

 V       time-zone ID                zone-id           America/Los_Angeles; Z; -08:30
 z       time-zone name              zone-name         Pacific Standard Time; PST
 O       localized zone-offset       offset-O          GMT+8; GMT+08:00; UTC-08:00;
 X       zone-offset 'Z' for zero    offset-X          Z; -08; -0830; -08:30; -083015; -08:30:15;
 x       zone-offset                 offset-x          +0000; -08; -0830; -08:30; -083015; -08:30:15;
 Z       zone-offset                 offset-Z          +0000; -0800; -08:00;

في حين أن بعض الإجابات صحيحة من الناحية الفنية ، إلا أنها غير مستحقة.

  • فصول java.util.date & Calendar مزعجة للغاية. بسبب العيوب في التصميم والتنفيذ ، تجنبها. لحسن الحظ ، لدينا اختيارنا لمكتبتين آخرتين في وقت التاريخ:
    • وقت جودا
      يمكن استخدام هذه المكتبة الشهيرة المفتوحة المصدر المجانية للتكلفة عبر عدة إصدارات من Java. يمكن العثور على العديد من الأمثلة على استخدامه على Stackoverflow. إن قراءة بعض هذه الأشياء ستساعدك في الحصول على السرعة بسرعة.
    • java.time.* حزمة
      هذه المجموعة الجديدة من الفصول مستوحاة من Joda-time وتحديدها من قبل JSR 310. هذه الفصول مدمجة في Java 8. يجري المشروع جارية لعملية خلفية هذه الفصول إلى Java 7 ، ولكن هذا الخلفية لا يتم دعمها بواسطة Oracle.
  • كما لاحظت كريستوفر جونسون بشكل صحيح في تعليقه على السؤال ، فإن الإجابات الأخرى تتجاهل القضايا الحيوية المتمثلة في:
    • وقت اليوم
      التاريخ يحتوي على جزء من تاريخ وجزء من وقت اليوم)
    • وحدة زمنية
      بداية اليوم تعتمد على المنطقة الزمنية. إذا فشلت في تحديد منطقة زمنية ، يتم تطبيق المنطقة الزمنية الافتراضية لـ JVM. هذا يعني أن سلوك الكود الخاص بك قد يتغير عند التشغيل على أجهزة الكمبيوتر الأخرى أو مع إعداد منطقة زمنية معدلة. ربما ليس ما انت تريد.
    • لغة
      تحدد لغة اللغة كيفية تفسير الكلمات (اسم الشهر واليوم) التي تمت مواجهتها أثناء التحليل. (ال الجواب من balusc يعالج هذا بشكل صحيح.) أيضًا ، تؤثر اللغة على إخراج بعض التنسيقات عند إنشاء تمثيل سلسلة في وقت التاريخ.

وقت جودا

بعض الملاحظات حول جودا وقت متابعة.

وحدة زمنية

في وقت جودا, ، أ DateTime الكائن يعرف حقًا المنطقة الزمنية المخصصة الخاصة به. هذا يتناقض مع فئة java.util.date التي يبدو للحصول على منطقة زمنية ولكن لا.

لاحظ في رمز المثال أدناه كيف نمرر كائن المنطقة الزمنية إلى التنسيق الذي يحلل السلسلة. يتم استخدام تلك المنطقة الزمنية لتفسير ذلك الوقت على أنه حدث في تلك المنطقة الزمنية. لذلك تحتاج إلى التفكير في المنطقة الزمنية وتحديدها التي تمثلها إدخال السلسلة هذه.

نظرًا لعدم وجود جزء زمني في سلسلة الإدخال الخاصة بك ، يعين Joda-time اللحظة الأولى من يوم المنطقة الزمنية المحددة كوقت اليوم. عادة هذا يعني 00:00:00 ولكن ليس دائما بسبب وقت توفير النهار (DST) أو غيرها من الحالات الشاذة. بالمناسبة ، يمكنك أن تفعل الشيء نفسه مع أي مثيل لوقت البيانات عن طريق الاتصال withTimeAtStartOfDay.

نمط التنسيق

تتشابه الأحرف المستخدمة في نمط Formatter في وقت Joda مع تلك الموجودة في Java.Util.date/calendar ولكن ليس بالضبط. اقرأ بعناية المستند.

ثبات

نستخدم عادة الفصول غير القابلة للتغيير في وقت جودا. بدلاً من تعديل كائن تاريخ موجود ، ندعو الطرق التي تنشئ مثيلًا جديدًا جديدًا استنادًا إلى الكائن الآخر مع نسخ معظم الجوانب إلا في حالة رغبة التعديلات. مثال على ذلك withZone في السطر الأخير أدناه. ثبات يساعد على جعل Joda-Time آمنًا جدًا لخيط الخيط ، ويمكن أن يجعل بعض العمل أكثر وضوحًا.

تحويلات

ستحتاج إلى java.util.date كائنات للاستخدام مع فئات/إطار عمل آخر لا يعرفون عن كائنات Joda-time. لحسن الحظ ، من السهل جدًا التحرك ذهابًا وإيابًا.

الانتقال من كائن java.util.date (المسمى هنا date) إلى Joda-Time DateTime ...

org.joda.time.DateTime dateTime = new DateTime( date, timeZone );

الذهاب في الاتجاه الآخر من وقت Joda إلى Java.Util.date كائن ...

java.util.Date date = dateTime.toDate();

عينة من الرموز

String input = "January 2, 2010";

java.util.Locale locale = java.util.Locale.US;
DateTimeZone timeZone = DateTimeZone.forID( "Pacific/Honolulu" ); // Arbitrarily chosen for example.
DateTimeFormatter formatter = DateTimeFormat.forPattern( "MMMM d, yyyy" ).withZone( timeZone ).withLocale( locale );
DateTime dateTime = formatter.parseDateTime( input );

System.out.println( "dateTime: " + dateTime );
System.out.println( "dateTime in UTC/GMT: " + dateTime.withZone( DateTimeZone.UTC ) );

عند الجري ...

dateTime: 2010-01-02T00:00:00.000-10:00
dateTime in UTC/GMT: 2010-01-02T10:00:00.000Z

أثناء التعامل مع فئة SimpledAteFormat ، من المهم أن نتذكر أن التاريخ ليس آمنًا لخيط الخيط ولا يمكنك مشاركة كائن تاريخ واحد مع مؤشرات ترابط متعددة.

كما يوجد فرق كبير بين "M" و "M" حيث يتم استخدام حالة صغيرة لدقائق ويتم استخدام حالة رأس المال للشهر. الشيء نفسه مع "D" و "D". هذا يمكن أن يسبب بق الحانات الدقيقة التي غالبا ما يتم تجاهلها. يرى جافادوك أو دليل لتحويل السلسلة حتى الآن في جافا لمزيد من التفاصيل.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date;
try {
    date = dateFormat.parse("2013-12-4");
    System.out.println(date.toString()); // Wed Dec 04 00:00:00 CST 2013

    String output = dateFormat.format(date);
    System.out.println(output); // 2013-12-04
} 
catch (ParseException e) {
    e.printStackTrace();
}

إنه يعمل بشكل جيد بالنسبة لي.

أيضًا ، غير متوفر مع بعض التقنيات من جانب العميل ، مثل GWT.

من الجيد أن تذهب إلى Calendar.getInstance () ، ومتطلباتك هو مقارنة تاريخين ؛ اذهب لتاريخ طويل.

بسيطة اثنين من التنسيقات التي استخدمناها:

  1. ما هو تاريخ التنسيق الذي نريده؟
  2. ما هو تاريخ التنسيق الموجود بالفعل؟

نحن نحلل تنسيق التاريخ الكامل:

date="2016-05-06 16:40:32";

public static String setDateParsing(String date) throws ParseException {

    // This is the format date we want
    DateFormat mSDF = new SimpleDateFormat("hh:mm a");

    // This format date is actually present
    SimpleDateFormat formatter = new SimpleDateFormat("yyyy-mm-dd hh:mm");
    return mSDF.format(formatter.parse(date));
}

برنامج الاختبار المتواضع. أستخدمه للعب مع الصيغة والتواريخ الطويلة التي أجده في ملفات السجل (ولكن من وضعها هناك ...).

برنامج الاختبار الخاص بي:

package be.test.package.time;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;

public class TimeWork {

    public static void main(String[] args) {    

        TimeZone timezone = TimeZone.getTimeZone("UTC");

        List<Long> longs = new ArrayList<>();
        List<String> strings = new ArrayList<>();

        //Formatting a date needs a timezone - otherwise the date get formatted to your system time zone.
        //Use 24h format HH. In 12h format hh can be in range 0-11, which makes 12 overflow to 0.
        DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss.SSS");
        formatter.setTimeZone(timezone);

        Date now = new Date();

        //Test dates
        strings.add(formatter.format(now));
        strings.add("01-01-1970 00:00:00.000");
        strings.add("01-01-1970 00:00:01.000");
        strings.add("01-01-1970 00:01:00.000");
        strings.add("01-01-1970 01:00:00.000");
        strings.add("01-01-1970 10:00:00.000");
        strings.add("01-01-1970 12:00:00.000");
        strings.add("01-01-1970 24:00:00.000");
        strings.add("02-01-1970 00:00:00.000");
        strings.add("01-01-1971 00:00:00.000");
        strings.add("01-01-2014 00:00:00.000");
        strings.add("31-12-1969 23:59:59.000");
        strings.add("31-12-1969 23:59:00.000");
        strings.add("31-12-1969 23:00:00.000");

        //Test data
        longs.add(now.getTime());
        longs.add(-1L);
        longs.add(0L); //Long date presentation at - midnight 1/1/1970 UTC - The timezone is important!
        longs.add(1L);
        longs.add(1000L);
        longs.add(60000L);
        longs.add(3600000L);
        longs.add(36000000L);
        longs.add(43200000L);
        longs.add(86400000L);
        longs.add(31536000000L);
        longs.add(1388534400000L);
        longs.add(7260000L);
        longs.add(1417706084037L);
        longs.add(-7260000L);

        System.out.println("===== String to long =====");

        //Show the long value of the date
        for (String string: strings) {
            try {
                Date date = formatter.parse(string);
                System.out.println("Formated date : " + string + " = Long = " + date.getTime());
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }

        System.out.println("===== Long to String =====");

        //Show the date behind the long
        for (Long lo : longs) {
            Date date = new Date(lo);
            String string = formatter.format(date);
            System.out.println("Formated date : " + string + " = Long = " + lo);        
        }
    }
}

نتائج الإختبار:

===== String to long =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 01-01-1970 24:00:00.000 = Long = 86400000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 31-12-1969 23:59:59.000 = Long = -1000
Formated date : 31-12-1969 23:59:00.000 = Long = -60000
Formated date : 31-12-1969 23:00:00.000 = Long = -3600000
===== Long to String =====
Formated date : 05-12-2014 10:17:34.873 = Long = 1417774654873
Formated date : 31-12-1969 23:59:59.999 = Long = -1
Formated date : 01-01-1970 00:00:00.000 = Long = 0
Formated date : 01-01-1970 00:00:00.001 = Long = 1
Formated date : 01-01-1970 00:00:01.000 = Long = 1000
Formated date : 01-01-1970 00:01:00.000 = Long = 60000
Formated date : 01-01-1970 01:00:00.000 = Long = 3600000
Formated date : 01-01-1970 10:00:00.000 = Long = 36000000
Formated date : 01-01-1970 12:00:00.000 = Long = 43200000
Formated date : 02-01-1970 00:00:00.000 = Long = 86400000
Formated date : 01-01-1971 00:00:00.000 = Long = 31536000000
Formated date : 01-01-2014 00:00:00.000 = Long = 1388534400000
Formated date : 01-01-1970 02:01:00.000 = Long = 7260000
Formated date : 04-12-2014 15:14:44.037 = Long = 1417706084037
Formated date : 31-12-1969 21:59:00.000 = Long = -7260000

يمكنك استخدام SimpleDateFormat لتغيير سلسلة حتى الآن

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String strDate = "2000-01-01";
Date date = new Date(sdf.parse(strDate).getTime());

مصدر وصلة

ل ذكري المظهر

calendar.getInstance (). getTime () يعطي

Thu Jul 26 15:54:13 GMT+05:30 2018

يستخدم

String oldDate = "Thu Jul 26 15:54:13 GMT+05:30 2018";
DateFormat format = new SimpleDateFormat("EEE LLL dd HH:mm:ss Z yyyy");
Date updateLast = format.parse(oldDate);

جرب هذا

String date = get_pump_data.getString("bond_end_date");
DateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH);
Date datee = (Date)format.parse(date);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top