是否可以通过在java中传递日期名称来查找日期编号?

时间:2018-06-08 12:00:21

标签: java date dayofweek localdate

我试图通过传递星期一或星期二等日期名称来查找日期编号,如1或2或3,因为日期编号可能会根据系统日历(星期日的某些日历)发生变化将在某个星期一的开始日。)

我需要通过传递那些日期和周数的索引来查找周一,周五或周日的日期。

我能够根据日期查找周数,但是要传递日期编号(或索引),我需要根据当地系统找出确切的索引。

请告诉我是否可能?

import java.time.LocalDateTime;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
public class HelloWorld{

     public static void main(String []args){

         String str = "2018-06-08 12:34:21";
         int sDate, eDate;
         DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); 
         LocalDateTime assignedDateTime = LocalDateTime.parse(str, formatter);
         //LocalDate assignedDate = assignedDateTime.toLocalDate();
          Instant instant = assignedDateTime.atZone(ZoneId.systemDefault()).toInstant();
          Date dateFromOld = Date.from(instant);

         Calendar calendar = new GregorianCalendar();
         calendar.setTime(dateFromOld);  

        int weekNumber = calendar.get(calendar.WEEK_OF_MONTH);
         int dayofWeek = calendar.get(Calendar.DAY_OF_WEEK);
        System.out.println(assignedDateTime);
        System.out.println(dateFromOld);
        System.out.println(weekNumber);
        System.out.println(dayofWeek);
     }
}

这是我写的代码,从中我可以找到所需日期的周数日期。

但是,我想通过传递日期名称找出日期编号,但我没有找到任何方法。有一些逻辑可以发现像写Enum函数一样,但在某些情况下,如果系统与枚举函数有不同的凝视日,这种逻辑也会失败。

我希望现在很清楚。

2 个答案:

答案 0 :(得分:2)

我的第一个例子是法国。法国使用国际标准(ISO),其中星期一是一周的第一天,星期二是第二天等。要查找号码,我们首先需要解析星期几的名称。接下来,相应的WeekFields对象可以为我们提供一个字段,我们可以使用该字段查询星期几中有关其一周中的数字的信息。

    DateTimeFormatter dayOfWeekFormatter
            = DateTimeFormatter.ofPattern("EEEE", Locale.ENGLISH);

    Locale loc = Locale.FRANCE;
    WeekFields wf = WeekFields.of(loc);

    String dayName = "Tuesday";
    DayOfWeek day = DayOfWeek.from(dayOfWeekFormatter.parse(dayName));
    int dayNumber = day.get(wf.dayOfWeek());
    System.out.println(dayName + " has number " + dayNumber);

输出:

  

星期二有2号

这是预期的。另一个例子是美国。美国周从星期日开始,所以星期二应该是一周的第3天。我们使用美国语言环境:

    Locale loc = Locale.US;

我的其余代码是相同的,但现在输出是:

  

星期二有3号

WeekFields课程有时候使用起来有点棘手,但如果你能找到如何使用它,它几乎总能在国际,美国和其他周计划中为你提供你想要的东西。

答案 1 :(得分:0)

日历周可以从星期日开始,但工作日的常数值将保持不变(星期日= 1,星期一= 2 ......)。您可以使用以下代码循环查看所有工作日并进行比较

    String inputDayName = "Thursday";
    int dayId=0;

    for(int i=0; i<7; i++)
    {
        calendar.add(Calendar.DATE, 1);
        String iteratingDayName = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.getDefault());
        if(iteratingDayName.equalsIgnoreCase(inputDayName))
        {
            dayId=calendar.get(Calendar.DAY_OF_WEEK);
            break;
        }
    }