当前位置: 首页 > 面试题库 >

在Java中解析这种类型的日期格式?

孔正文
2023-03-14
问题内容

在Java中解析此日期格式的最简单方法是什么?

2010-09-18T10:00:00.000+01:00

我在Java中阅读了DateFormat
api,却找不到采用字符串甚至这种类型的日期格式作为要解析的参数的方法?当我说的是解析时,我的意思是我想将“日期(月,日,年)”,“时间”和“时区”提取到单独的字符串对象中。

提前致谢


问题答案:

另一个答案是,由于您似乎只专注于String拆开(恕我直言,这不是一个好主意)。我们假设字符串是有效的ISO8601。您可以假设它 始终
是您引用的形式,还是仅适用于8601?如果是后者,则您必须像这些家伙那样应付一堆场景。

他们提出来验证8601替代方案的正则表达式是:

^([\+-]?\d{4}(?!\d{2}\b))((-?)((0[1-9]|1[0-2])(\3([12]\d|0[1-9]|3[01]))?|W([0-4]\d|5[0-2])
 (-?[1-7])?|(00[1-9]|0[1-9]\d|[12]\d{2}|3([0-5]\d|6[1-6])))([T\s]((([01]\d|2[0-3])
 ((:?)[0-5]\d)?|24\:?00)([\.,]\d+(?!:))?)?(\17[0-5]\d([\.,]\d+)?)?
 ([zZ]|([\+-])([01]\d|2[0-3]):?([0-5]\d)?)?)?)?$

弄清楚如何挑出正确的捕获组,这让我显得有些呆滞。不过,以下将适用于您的特定情况:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class Regex8601
{
  static final Pattern r8601 = Pattern.compile("(\\d{4})-(\\d{2})-(\\d{2})T((\\d{2}):"+
                               "(\\d{2}):(\\d{2})\\.(\\d{3}))((\\+|-)(\\d{2}):(\\d{2}))");


  //2010-09-18T10:00:00.000+01:00

  public static void main(String[] args)
  {
    String thisdate = "2010-09-18T10:00:00.000+01:00";
    Matcher m = r8601.matcher(thisdate);
    if (m.lookingAt()) {
      System.out.println("Year: "+m.group(1));
      System.out.println("Month: "+m.group(2));
      System.out.println("Day: "+m.group(3));
      System.out.println("Time: "+m.group(4));
      System.out.println("Timezone: "+m.group(9));
    } else {
      System.out.println("no match");
    }
  }
}


 类似资料:
  • 我想以yyyy-mm-dd格式存储今天的日期。在存储之前,我将今天的日期格式化,并再次解析格式化后的字符串。它以不同于我想要的格式给出了输出日期。我如何获得日期,将其格式化为' yyyy-mm-dd '并再次将其转换为日期,并希望输出格式为' yyyy-mm-dd '。请找到下面的代码,告诉我哪里错了 我得到的上述代码的输出是星期四 Mar 07 00:00:00 GMT 2013.但我希望输出为

  • 问题内容: 我想解析一个日期,它可以是几种我事先知道的格式。如果无法解析,则返回nil。在红宝石中,我确实这样: 这是简洁而有效的。如何在Python中做同样的事情? 问题答案: 您可以使用catch来尝试使用不匹配的格式时发生的情况。如@Bakuriu所述,您可以在找到匹配项时停止迭代以避免不必要的解析,然后在未定义因为未找到匹配格式而定义行为时: 您可以使用catch来尝试使用不匹配的格式时发

  • 问题内容: 我正在尝试解析文档中的某些日期。看来用户已经以类似但并非确切的格式输入了这些日期。 格式如下: 尝试解析所有这些的最佳方法是什么?这些似乎是最常见的,但是我想让我感到困扰的是,如果我的模式“ M / yyyy”永远不会在“ MM / yyyy”之前出现,我是否必须设置try / catch块以最小限制嵌套到最大限制方式?看来肯定会花费很多代码重复才能实现此目的。 问题答案: 你需要为每

  • 我是Rest API的新手。我有一个xml输出需要解封。以下是xml输出: 实际的xml输出总共有37个条目。下面是模型类: 下面是Rest Api类代码: 在执行此代码时,我收到错误 javax.xml.bind.UnMarshalException-带有链接异常:[org.xml.sax.saxParseException;LineNumber:1;ColumnNumber:110;外部DTD

  • 问题内容: 我在中收到格式日期。我如何解析它得到和。 ISO格式的日期: 问题答案: 一些参考 http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html http://docs.oracle.com/javase/7/docs/api/java/util/Calendar.html 希望能帮助到你

  • 问题内容: 我正在从一个字符串中解析两个日期,如下所示: 我需要做的是找出这两个日期之间的区别,例如: = 8天2小时36分钟21秒 ^这是我需要的两个日期/时间 我相信我需要解析格式并将其转换为另一种格式,然后减去两者之间的差并进行数学运算以得出之间的天/小时/分钟/秒 问题答案: 与其他回答者试图暗示的相反,在标准Java SE中,计算两个日期之间的差异并不是那么简单。 您的第一步确实是将这些