0

我有以下格式的日期

//输入日期

Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)

//输出日期格式

I want to change this to "dd-mm-yyyy, hh:mm:ss".

我从 db 获取输入日期格式。我必须将其更改为输出日期格式,我将在网格中显示它。

我尝试了以下代码。

DateFormat outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss"); 
                try
                {
                    Date date = outputDate.parse(facade.getDate.toString()); **//getting exception here**
                    outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss");
                    Date date1 = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss").parse(outputDate
                            .format(date));
                    facade.setDate(date1);
                }catch (ParseException e)
                {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

我正进入(状态

java.text.ParseException: Unparseable date: "2013-06-06 00:00:00.0".

任何帮助..

4

5 回答 5

1

"2013-06-06 00:00:00.0"与您的格式不匹配"dd-mm-yyyy, hh:mm:ss""dd-MM-yyyy hh:mm:ss"改为

但是,看看你的代码,我猜facade.getDate它实际上是java.sql.Timestamp继承自的,java.util.Date所以你可以直接将它传递给这样的格式

new SimpleDateFormat("dd-MM-yyyy, hh:mm:ss").format(facade.getDate)
于 2013-06-07T06:23:15.843 回答
1

这是一些对我有用的代码:

import java.text.*;
import java.util.*;

public class Test {
    public static void main(String[] args) throws Exception {
        String input = "Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)";
        DateFormat inputFormat = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss 'GMT'z",
                                                      Locale.ENGLISH);
        Date date = inputFormat.parse(input);

        DateFormat outputFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss",
                                                       Locale.ENGLISH);
        outputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

        String output = outputFormat.format(date);
        System.out.println(output);
    }
}

需要考虑的事项:

  • 您需要计算出您的输出时区。目前我已将其设置为 UTC,但这可能不是您想要的。
  • 你真的需要退后一步,把事情想清楚。您显然有两种不同的格式 - 您正在尝试从一种转换为另一种。因此,创建三个具有相同SimpleDateFormat格式的不同对象永远不会起作用。
  • 您需要仔细阅读文档... in SimpleDateFormatM表示月份,m表示分钟;h使用 12 小时制并H使用 24 小时制。

这是假设您实际上需要以字符串开头。如果getDate已经是 aDate或 a Timestamp,您可以忽略第一部分 - 只需使用上述代码的输出部分。您应该尽可能避免不必要的字符串转换。

请注意,这dd-MM-yyyy是一种稍微不寻常的格式 - 您确定您实际上并不想要yyyy-MM-dd更常见(且可排序)的格式吗?

于 2013-06-07T06:27:26.797 回答
0
DateFormat outputDate = new SimpleDateFormat("yyyy-dd-mm hh:mm:ss");
try {
    Date date = outputDate.parse("2013-06-06 00:00:00.0");
    System.out.println(new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss").format(date));
} catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
}

效果很好,第 1 行不正确。您的 SimpleDateFormat.parse 需要采用输入日期的确切格式。然后你想以不同的格式输出它,所以你制作另一种格式并设置格式,然后调用 SimpleDateFormat.format(date) 并在其上放置一个 println。

于 2013-06-07T06:28:55.210 回答
0

故障在这里

DateFormat outputDate = new SimpleDateFormat("dd-mm-yyyy, hh:mm:ss"); 

模式应该等于Thu Jun 06 2013 00:00:00 GMT+0530 (India Standard Time)。不是你的输出字符串模式。

于 2013-06-07T06:29:19.887 回答
0
@Test
public void test() throws ParseException {
    SimpleDateFormat sdf_org = new SimpleDateFormat("E MMM dd yyyy HH:mm:ss 'GMT'Z", Locale.ENGLISH);
    Date d = sdf_org.parse("Thu Jun 06 2013 00:00:00 GMT+0530");
    SimpleDateFormat sdf_target = new SimpleDateFormat("yyyy-mm-dd HH:mm:ss.SSS");

    System.out.println(sdf_target.format(d));
}

输出控制台:2013-30-06 03:30:00.000

于 2013-06-07T06:54:21.517 回答