在java中是否可以通过传递日名来查找日数?

在java中是否可以通过传递日名来查找日数?,java,date,dayofweek,localdate,Java,Date,Dayofweek,Localdate,我试图通过传递一个日期名称(如星期一或星期二)来找出日期,如1、2或3,因为日期可能会根据系统日历而改变(某些日历星期天将是某些星期一的起始日) 我需要找出星期一,星期五或星期日的日期,通过这些天和星期数的索引 我能够根据日期找出周数,但要传递日数(或索引),我需要根据本地系统找出准确的索引 请告诉我这是否可能 import java.time.LocalDateTime; import java.time.LocalDate; import java.time.format.DateTimeF

我试图通过传递一个日期名称(如星期一或星期二)来找出日期,如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);
     }
}
这是我写的代码,从中我可以找到所需日期的周数和日数

但是,我想通过传递日名来找出日数,但我没有找到任何方法。有一些逻辑可以发现,比如写枚举函数,但这种逻辑在某些情况下也会失败,比如系统的起始日期与我们的枚举函数不同


我希望现在清楚了。

日历周可以从周日以外的时间开始,但工作日的常量值将保持不变(周日=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;
        }
    }
String inputDayName=“星期四”;
int dayId=0;

对于(inti=0;i我的第一个例子是法国。法国使用国际标准(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);
输出:

星期二是第二天

这是意料之中的。另一个例子是美国。美国周从周日开始,所以周二应该是一周的第三天。我们使用美国地区:

    Locale loc = Locale.US;
我的代码的其余部分是相同的,但现在输出是:

星期二是第三天


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

听起来你已经有一些代码可以做些什么了,但你的问题中没有。你能发布一些代码来显示y的上下文吗我们的问题是?查看类它的可能副本是绝对可能的。如果您可以使用
java.time
,即现代的java日期和时间API,那么您就没有理由想使用任何旧的和过时的类,例如
date
Calendar
。现代API提供了您可以使用的所有功能我是.So no,@JohnBollinger,我强烈反对研究
java.util.Calendar
。麻烦的
Calendar
类多年前被java.time类取代。这个答案在2018年是一个糟糕的建议。