Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中基于月份的日期选择器_Java_Date_Selenium Webdriver_Compare - Fatal编程技术网

Java中基于月份的日期选择器

Java中基于月份的日期选择器,java,date,selenium-webdriver,compare,Java,Date,Selenium Webdriver,Compare,我有SeleniumWebDriverTestNG的Java代码。用于比较网站上的日期是否与今天的日期相同。 问题是2018年4月11日网页上的日期dateOnWebpage是格式 今天2018年4月11日 因此,我使用选择器来比较日期格式,如果月份

我有SeleniumWebDriverTestNG的Java代码。用于比较网站上的日期是否与今天的日期相同。 问题是2018年4月11日网页上的日期
dateOnWebpage
是格式

今天2018年4月11日

因此,我使用选择器来比较日期格式,如果月份<10
if(javaDateSelector<10)
比要比较的日期的格式是M/dd/yyyy,否则的格式是MM/dd/yyyy

有没有比我做的更好的编码方法?因为我需要将date解析为string,而不是int来比较它,代码相当长

@Test(priority=3)
 public void test3DateCheck() throws Exception
 {

  String dateOnWebpage = driver.findElement(By.xpath("//div[@id='homeCalendarSection']/div/div[2]/table/tbody/tr/td/div/ul/li")).getText();

  System.out.println("Today Date on webpage is : " + dateOnWebpage);

  //DateFormat dateFormat1 = new SimpleDateFormat("M/dd/yyyy");
  DateFormat dateFormat1 = new SimpleDateFormat("MM");
  Date date = new Date();
  String javaDate1 = dateFormat1.format(date);
  int javaDateSelector = Integer.parseInt(javaDate1);

  if(javaDateSelector < 10)
  { 
      DateFormat dateFormat2 = new SimpleDateFormat("M/dd/yyyy");  
      String javaDate2 = dateFormat2.format(date);
      System.out.println("Today Date from Java is : " + javaDate2);
      Assert.assertEquals(dateOnWebpage, "Today " + javaDate2);
  }
  else
  {
      DateFormat dateFormat3 = new SimpleDateFormat("MM/dd/yyyy");  
      String javaDate3 = dateFormat3.format(date);
      System.out.println("Today Date from Java is : " + javaDate3);
      Assert.assertEquals(dateOnWebpage, "Today " + javaDate3);
  }
@测试(优先级=3)
public void test3DateCheck()引发异常
{
字符串dateOnWebpage=driver.findElement(By.xpath(“//div[@id='homeCalendarSection']]/div/div/div[2]/table/tbody/tr/td/div/ul/li”).getText();
System.out.println(“网页上的今天日期为:“+dateOnWebpage”);
//DateFormat dateFormat1=新的简化格式(“M/dd/yyyy”);
DateFormat dateFormat1=新的SimpleDateFormat(“MM”);
日期=新日期();
字符串javaDate1=dateFormat1.format(日期);
int javaDateSelector=Integer.parseInt(javaDate1);
如果(javaDateSelector<10)
{ 
DateFormat dateFormat2=新的简化格式(“M/dd/yyyy”);
字符串javaDate2=dateFormat2.format(日期);
println(“来自Java的今天的日期是:“+javaDate2”);
Assert.assertEquals(dateOnWebpage,“今日”+javaDate2);
}
其他的
{
DateFormat dateFormat3=新的简化格式(“MM/dd/yyyy”);
字符串javaDate3=dateFormat3.format(日期);
println(“来自Java的今天的日期是:“+javaDate3”);
Assert.assertEquals(dateOnWebpage,“今日”+javaDate3);
}

}

如果您不关心网页上的日期是否用前导零表示月份和月份的日期,只想测试日期是否正确:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("'Today' M/d/uuuu");
    LocalDate today = LocalDate.now(ZoneId.of("Pacific/Norfolk"));
    System.out.println("Today is " + today);
    LocalDate observedDate = LocalDate.parse(dateOnWebpage, dateFormatter);
    Assert.assertEquals(today, observedDate);
我不是在测试字符串,而是在解析日期并测试它。即使模式中有一个
M
和一个
d
,解析两位数的月份和两位数的月份日也不会有问题

另一方面,如果您还想测试网页上的日期是否没有任何前导零,最好测试字符串,就像您已经做的那样:

    DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("M/d/uuuu");
    LocalDate today = LocalDate.now(ZoneId.of("Pacific/Norfolk"));
    String todayString = today.format(dateFormatter);
    System.out.println("Today is " + todayString);
    Assert.assertEquals("Today " + todayString, dateOnWebpage);
同样,即使图案中有一个
M
和一个
d
,如果月份或月份的日期大于9,也会打印两位数字。
格式
方法还能做什么?如果总是需要两位数的月份,请将
dd
放入格式模式字符串中

在这两个片段中,请填写您想要的时区,我把太平洋/诺福克放在这里,因为全球各地的日期都不一样

我正在使用并推荐
java.time
,这是一种现代的java日期和时间API
DateFormat
SimpleDateFormat
不仅早已过时,而且还出了名的麻烦<代码>日期也同样过时。我会完全避开那些课程。现代API通常更易于使用


链接:解释如何使用
java.time

我建议您避免使用
SimpleDataFormat
类。它不仅早已过时,而且还出了名的麻烦。今天,我们的情况好多了。4月9日会以
4/9/2018
4/09/2018
的形式出现在网页上吗?您不需要有条件地切换格式
M/dd/yyyyy
MM/dd/yyyy
月数>=10.1)@Ole V.V.对不起,我不知道4月9日是以2018年4月9日还是2018年4月9日的形式出现在网页上,但谢谢,这可能会引起另一个问题。2) @Thomas我需要有条件地切换格式M/dd/yyyy与MM/dd/yyyy不相同如果我这样做,我会得到错误java.lang.AssertionError:预期[今天2018年11月4日],但发现[今天2018年11月4日]