-3

我想将日期解析为我的格式,02:09 AM 25/09/2012但我不能。我使用了这段代码。

SimpleDateFormat sdf1 = new SimpleDateFormat("MMMM, DD yyyy HH:mm:ss Z");

//September, 25 2012 02:09:42 +0000
Date date = sdf1.parse(String.valueOf(PUNCH_TIME)); 

SimpleDateFormat sdf2 = new SimpleDateFormat("HH':'mm a 'on' DD'/'MMMM'/'yyyy");

SimpleDateFormat sdf2 = new SimpleDateFormat("MM");
String timeformat=sdf2.format(date);
txtHomePunchStatus.setText("You have Punched In at "+timeformat);

我得到了You have punched IN at 7:52 AM on 25/01/2012

4

3 回答 3

1

您可能对时区有疑问。输入字符串September, 25 2012 02:09:42 +0000是 UTC 的时间戳(偏移量+0000)。当您以所需格式格式化日期时,您没有指定时区,因此该SimpleDateFormat对象将在您的本地时区显示您的日期,这可能不是 UTC。

您可以在SimpleDateFormat用于格式化日期的对象上设置时区。例如:

DateFormat df1 = new SimpleDateFormat("MMMM, dd yyyy HH:mm:ss Z");
Date date = df1.parse(PUNCH_TIME);

DateFormat df2 = new SimpleDateFormat("HH:mm a 'on' dd/MM/yyyy");
df2.setTimeZone(TimeZone.getTimeZone("UTC"));
String result = df2.format(date);

System.out.println(result);

注意:你必须使用dd而不是DD为天;DD表示一年中的dd天数,表示月份中的天数(参见 API 文档SimpleDateFormat)。

ps:您对“解析”和“格式”这两个词的使用令人困惑。解析的意思是:从字符串转换为Date对象,格式化的意思正好相反:从Date对象转换为字符串。

于 2012-09-25T13:26:55.347 回答
0

首先你有一个双重声明sdf2。然后,您需要使用hhandmm数小时和数分钟。阅读文档:SimpleDateFormat就像在这个例子中:

    SimpleDateFormat sdf1 = new SimpleDateFormat("MMMM, DD yyyy HH:mm:ss Z");

    //September, 25 2012 02:09:42 +0000
    Date date = null;
    try {
        date = sdf1.parse(String.valueOf(PUNCH_TIME));
    } catch (ParseException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 

    SimpleDateFormat sdf2 = new SimpleDateFormat("hh:mm a 'on' DD/MM/yyyy");

    String timeformat=sdf2.format(date);
于 2012-09-25T12:13:36.423 回答
0
于 2018-01-17T04:44:00.607 回答