سؤال

أريد حفظ كائن تاريخ إلى سلسلة قابلة للقراءة (على سبيل المثال 22/10/2009 21:13:14) أيضا parsable مرة أخرى إلى كائن تاريخ.

لقد جربت أشياء كثيرة وأفضل ما يمكن أن أجدها هي استخدام DateFormater لتحليلها وتشكيلها ولكن لديها نكسة. عند تنسيق تاريخ تفقد معلومات الثواني. حاولت أن أجد ما إذا كان هناك خيار لتنسيقه وعرض الثواني (حتى أفضل سيكون على المستوى المليهي لأن هذا هو القرار الذي يسمح لك به كائن التاريخ) لكنني جئت قصيرة.

أيه أفكار؟

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

المحلول

إلقاء نظرة على java.text.simpledateformat.

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss.SSS");
Date dt = new Date();
String S = sdf.format(dt); // formats to 09/23/2009 13:53:28.238
Date dt2 = sdf.parse(S); // parses back

نصائح أخرى

SimpleDateFormat يمكن التنسيق وتحليل التاريخ بناء على نظام نمط بسيط للغاية يتضمن الثانية وحتى milliseconds.

إجابات أخرى هي كلها جيدة.

ولكن عند القيام بهذا النوع من الأشياء من فضلك اختيار تنسيق ذلك فرز بشكل صحيح عندما تكون مشفرة كسلسلة .... "yyyy / mm / dd hh: mm: ss" على ما يرام. دائما ما يدورني عندما يختار مهندسو البرمجيات تنسيق تاريخ لا ينفر بطريقة واضحة ومريحة.

ستحفظ زملائك المطورون الكثير من الألم في بعض النقاط البعيدة في المستقبل - فكر في الأمر ككارما جيد :-)

قليلا خارج الموضوع، لكنني أشعر دائما بالحاجة إلى تذكير الناس أن deadformat و simpledateformat ليست مؤكدة مؤمنة! تنص الوثائق الشمسية بوضوح على هذا، لكنني أظل العثور على رمز في البرية حيث يلتصق الناس بساطة SimpleDateFormat في ثابت ...

ISO 8601.

يستخدم ISO 8601. صيغة.

  • إنه مرن، ويشمل ثوان وكسب ثانية إذا كان هناك أي، ولكن يمكنك أيضا تركها إذا كانت 0.
  • انها قياسية، أكثر وأكثر وتنسيق الأدوات وتحليلها. عظيم للاستسلالية للتخزين أو تبادل البيانات.
  • يذهب مثل 2009-10-22T21:13:14, ، أود أن أقول انها جميلة قابلة للقراءة البشرية (على الرغم من أن T في المنتصف الذي يدل على بداية الجزء الزمني قد يشعر غير عادي في البداية).
  • السلاسل ترتيب بشكل صحيح، كما طلب ميكيرا في إجابة أخرى, ، طالما كانت السنوات في النطاق المكون من أربعة أرقام من 1000 إلى 9999.
  • فصول java.time, ، واجهة برمجة تطبيقات Java الحديثة والوقت، وكذلك تلك الخاصة ب joda Time Parse ISO 8601 كما هو الافتراضي، وهذا هو، دون أي تكوين صريح، وتنتج نفس التنسيق من toString أساليب.

مظاهرة متواضعة لاستخدام java.time:

LocalDateTime dateTime = LocalDateTime.of(2009, 10, 22, 21, 13, 14);
String readableString = dateTime.toString();
System.out.println(readableString);
LocalDateTime parsedBack = LocalDateTime.parse(readableString);
System.out.println(parsedBack);

هذا يطبع خطين متطابقين:

2009-10-22T21:13:14
2009-10-22T21:13:14

الأخير System.out.println() اتصل باستدعاء ضمنيا toString() مرة أخرى، لذلك لا ينبغي أن يفاجئ ذلك.

إذا كنت ترغب في القيام بذلك أكثر بساطة قليلا، ويجعل من جعل DateFormat الخاص بك أن معظم الإجابات الأخرى تنطوي عليها، يمكنك الاستفادة من التنسيق الافتراضي في java.time.instant.:

(new Date()).toInstant.toString();
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top