我试图通过传递星期一或星期二等日期名称来查找日期编号,如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函数一样,但在某些情况下,如果系统与枚举函数有不同的凝视日,这种逻辑也会失败。
我希望现在很清楚。
答案 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;
}
}