#java #parsing #datetime
#java #синтаксический анализ #дата и время
Вопрос:
Я хочу формат даты как дд-МММ-гггг. Мой код:
String v_date_str="Sun Mar 06 11:28:16 IST 2011";
DateFormat formatter;
formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date_temp=null;
try {
date_temp = (Date) formatter.parse(v_date_str);
} catch (ParseException ex) {
Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("output: " date_temp);
Но я получил ошибку как:
The log message is null.
java.text.ParseException: Unparseable date: "Sun Mar 06 11:28:16 IST 2011"
at java.text.DateFormat.parse(DateFormat.java:337)
at org.fes.pis.jsf.main.Attendance_Calculation.btn_show_pending_appl_action(Attendance_Calculation.java:415)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at com.sun.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:68)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:99)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:771)
at javax.faces.component.UICommand.broadcast(UICommand.java:372)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:475)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:756)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:82)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at com.sun.faces.extensions.avatar.lifecycle.PartialTraversalLifecycle.execute(PartialTraversalLifecycle.java:94)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:265)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:666)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:597)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:872)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.process(SSLReadTask.java:444)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLReadTask.doTask(SSLReadTask.java:230)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
Спасибо за любую помощь….
Но я хочу дату в формате date как dd-МММ-гггг.
Комментарии:
1. я получил решение в виде строки v_date_str=»Sun Mar 06 11:28: 16 IST 2011″; DateFormat formatter; formatter = новый SimpleDateFormat(«EEE MMM d HH: mm: ss zzz гггг»); Дата date_temp = null; Строка d_temp =null; SimpleDateFormat DateFormat = новый SimpleDateFormat(«dd- МММ-гггг»); попробуйте { date_temp = (Дата) formatter.parse форматирования(v_date_str); d_temp = DateFormat.format(date_temp); System.out.println(«val : » d_temp); } поймать (ParseException ex) {// }
Ответ №1:
Вам следует изменить свой код на:
String v_date_str="Sun Mar 06 11:28:16 IST 2011";
DateFormat formatter;
formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
Date date_temp=null;
try {
date_temp = (Date) formatter.parse(v_date_str);
} catch (ParseException ex) {
Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex);
}
System.out.println("output: " date_temp);
Вы используете неправильный формат даты для синтаксического анализа даты.
Комментарии:
1. Вы ошибаетесь. java.text.SimpleDateFormat это подкласс java.text.DateFormat код работает отлично.
Ответ №2:
Используйте это, это сработает:
SimpleDateFormat formatter=new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
Вы не можете проанализировать дату с помощью SimpleDateFormat, который настроен в другом формате
Комментарии:
1. Но смотрите мой ответ — простое внесение этого изменения не приведет к печати желаемой даты.
2. что вы имеете в виду? Я имел в виду использование одного SimpleDateFormat для синтаксического анализа и другого для печати.
3. @Robin: Если вы используете два формата, это может сработать. Это будет более осуществимо, если вы покажете какой-нибудь демонстрационный код.
Ответ №3:
В этом коде вы указываете Java проанализировать дату, используя заданный формат, а затем распечатать ее. Поэтому используемая вами строка формата должна соответствовать формату входной строки даты. Поскольку этого не происходит, неудивительно, что это не работает.
Для преобразования дат между двумя разными форматами вы, вероятно, захотите использовать два разных объекта DateFormat, один для синтаксического анализа, а другой для печати.
Ответ №4:
Попробуйте следующий код:
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
public class SimpleDateFormat02 {
public static void main(String[] args) throws ParseException {
String v_date_str="Sun Mar 06 11:28:16 IST 2011";
Date v_date = new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH).parse(v_date_str);
DateFormat formatter = null;
formatter = new SimpleDateFormat("dd-MMM-yyyy");
Date date_temp=null;
try {
date_temp = (Date) formatter.parse("31-Dec-2012"); // String of same format a formatter
} catch (ParseException ex) {
//Logger.getLogger(Attendance_Calculation.class.getName()).log(Level.SEVERE, null, ex);
ex.printStackTrace();
}
System.out.println("output: " formatter.format(v_date));
}
}
Это дает вам желаемый результат!
Ответ №5:
У меня это работает очень хорошо
SimpleDateFormat format1 = новый SimpleDateFormat(«дд-ММ-гггг»);
Строка отформатирована = format1.format(objectValue);
Дата javaDate = format1.parse (отформатирована);
Ответ №6:
я получил решение в виде,
String v_date_str = "Sun Mar 06 11:28:16 IST 2011";
DateFormat formatter = new SimpleDateFormat("EEE MMM d HH:mm:ss zzz yyyy");
String d_temp;
Date dTemp;
try {
dTemp = formatter.parse(v_date_str);
formatter=new SimpleDateFormat("dd-MMM-yyyy");
d_temp=formatter.format(dTemp);
System.out.println("val : " d_temp);
} catch (ParseException ex) {
}
Комментарии:
1. Я не думаю, что вы можете использовать DateFormat formatter = new SimpleDateFormat, это ошибка несовместимых типов.
2. @Nizzy мы можем использовать подобным образом. Просто попробуйте мой код с простым классом Java.