在java中是否可以通过传递日名来查找日数?
我试图通过传递一个日期名称(如星期一或星期二)来找出日期,如1、2或3,因为日期可能会根据系统日历而改变(某些日历星期天将是某些星期一的起始日) 我需要找出星期一,星期五或星期日的日期,通过这些天和星期数的索引 我能够根据日期找出周数,但要传递日数(或索引),我需要根据本地系统找出准确的索引 请告诉我这是否可能在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
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年是一个糟糕的建议。