ตัวอย่างเช่นฉันมีวันที่: "23/2/2010" (23 กุมภาพันธ์ 2010) ฉันต้องการที่จะผ่านไปยังฟังก์ชั่นที่จะกลับมาเป็นวันของสัปดาห์ ฉันจะทำสิ่งนี้ได้อย่างไร
ในตัวอย่างนี้ฟังก์ชั่นควรกลับString
"อ."
นอกจากนี้หากต้องการเพียงลำดับวันก็จะสามารถเรียกดูได้อย่างไร
ตัวอย่างเช่นฉันมีวันที่: "23/2/2010" (23 กุมภาพันธ์ 2010) ฉันต้องการที่จะผ่านไปยังฟังก์ชั่นที่จะกลับมาเป็นวันของสัปดาห์ ฉันจะทำสิ่งนี้ได้อย่างไร
ในตัวอย่างนี้ฟังก์ชั่นควรกลับString
"อ."
นอกจากนี้หากต้องการเพียงลำดับวันก็จะสามารถเรียกดูได้อย่างไร
คำตอบ:
ใช่. ขึ้นอยู่กับกรณีของคุณ:
คุณสามารถใช้java.util.Calendar
:
Calendar c = Calendar.getInstance();
c.setTime(yourDate);
int dayOfWeek = c.get(Calendar.DAY_OF_WEEK);
หากคุณต้องการผลลัพธ์ที่จะเป็นTue
มากกว่า 3 (วันของสัปดาห์ที่มีการจัดทำดัชนีเริ่มต้นที่ 1 สำหรับวันอาทิตย์ให้ดูที่ Calendar.SUNDAY) แทนที่จะไปตามปฏิทินเพียงแค่ฟอร์แมตสตริงใหม่: new SimpleDateFormat("EE").format(date)
( EE
หมายถึง "วันในสัปดาห์รุ่นสั้น" )
หากคุณมีการป้อนข้อมูลของคุณเป็นสตริงมากกว่าDate
คุณควรใช้SimpleDateFormat
ในการแยกวิเคราะห์:new SimpleDateFormat("dd/M/yyyy").parse(dateString)
คุณสามารถใช้ Joda-เวลาDateTime
และโทรและdateTime.dayOfWeek()
/ หรือDateTimeFormat
แก้ไข: ตั้งแต่ Java 8 คุณสามารถใช้แพ็คเกจ java.time แทน joda-time
Calendar
ระดับเช่นหรือCalendar.SUNDAY
Calendar.JANUARY
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล
String input_date="01/08/2012";
SimpleDateFormat format1=new SimpleDateFormat("dd/MM/yyyy");
Date dt1=format1.parse(input_date);
DateFormat format2=new SimpleDateFormat("EEEE");
String finalDay=format2.format(dt1);
ใช้รหัสนี้เพื่อค้นหาชื่อวันจากวันที่ป้อนง่ายและผ่านการทดสอบอย่างดี
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy", java.util.Locale.ENGLISH);
Date myDate = sdf.parse("28/12/2013");
sdf.applyPattern("EEE, d MMM yyyy");
String sMyDate = sdf.format(myDate);
ผลลัพธ์คือ: Sat, 28 Dec 2013
ตัวสร้างเริ่มต้นคือการ "เริ่มต้น" สถานที่เกิดเหตุจึงควรระมัดระวังการใช้มันเมื่อคุณต้องการรูปแบบที่เฉพาะเจาะจง
public SimpleDateFormat(String pattern) {
this(pattern, Locale.getDefault(Locale.Category.FORMAT));
}
กำลังใช้java.time ...
LocalDate.parse( // Generate `LocalDate` object from String input.
"23/2/2010" ,
DateTimeFormatter.ofPattern( "d/M/uuuu" )
)
.getDayOfWeek() // Get `DayOfWeek` enum object.
.getDisplayName( // Localize. Generate a String to represent this day-of-week.
TextStyle.SHORT_STANDALONE , // How long or abbreviated. Some languages have an alternate spelling for "standalone" use (not so in English).
Locale.US // Or Locale.CANADA_FRENCH and such. Specify a `Locale` to determine (1) human language for translation, and (2) cultural norms for abbreviation, punctuation, etc.
)
อังคาร
ดูรหัสนี้ทำงานจริงได้ที่ IdeOne.com ( Locale.US
ทำงานได้ที่นั่นเท่านั้น)
ดูรหัสตัวอย่างของฉันข้างต้นและดูคำตอบที่ถูกต้องสำหรับ java.time โดย Przemek
หากต้องการเพียงลำดับวันก็จะสามารถเรียกคืนสิ่งนั้นได้อย่างไร
สำหรับเลขลำดับพิจารณาผ่านรอบDayOfWeek
วัตถุ enum DayOfWeek.TUESDAY
แทนเช่น โปรดทราบว่า a DayOfWeek
เป็นวัตถุอัจฉริยะไม่ใช่เพียงแค่จำนวนสตริงหรือจำนวนเต็มเท่านั้น การใช้อ็อบเจกต์ enumทำให้โค้ดของคุณจัดทำเอกสารด้วยตนเองได้มากขึ้นรับประกันค่าที่ถูกต้องและให้ความปลอดภัยในการพิมพ์
แต่ถ้าคุณยืนยันถามDayOfWeek
สำหรับตัวเลข คุณจะได้รับ 1-7 วันจันทร์ถึงวันอาทิตย์ตามมาตรฐาน ISO 8601มาตรฐาน
int ordinal = myLocalDate.getDayOfWeek().getValue() ;
UPDATE:โครงการ Joda-Time อยู่ในโหมดบำรุงรักษา ทีมให้คำแนะนำการโยกย้ายไปยังคลาส java.time เฟรมเวิร์ก java.time สร้างขึ้นใน Java 8 (รวมถึงback-ported ไปยัง Java 6 & 7และปรับให้เข้ากับ Android เพิ่มเติม )
นี่คือตัวอย่างรหัสใช้Joda เวลาห้องสมุดรุ่น 2.4 ตามที่กล่าวไว้ในคำตอบที่ได้รับการยอมรับโดย Bozho Joda-Time นั้นเหนือกว่าคลาส java.util.Date/.Calendar ที่มาพร้อมกับ Java
LocalDate
Joda-Time เสนอ LocalDate
ชั้นเรียนเพื่อเป็นตัวแทนของวันที่เท่านั้นโดยไม่มีช่วงเวลาของวันหรือเขตเวลา สิ่งที่คำถามนี้เรียกร้อง คลาส java.util.Date/.Calendar เก่าที่มาพร้อมกับ Java ไม่มีแนวคิดนี้
แยกสตริงเป็นค่าวันที่
String input = "23/2/2010";
DateTimeFormatter formatter = DateTimeFormat.forPattern( "d/M/yyyy" );
LocalDate localDate = formatter.parseLocalDate( input );
แยกออกมาจากค่าวันที่วันที่จำนวนสัปดาห์และชื่อ
int dayOfWeek = localDate.getDayOfWeek(); // Follows ISO 8601 standard, where Monday = 1, Sunday = 7.
Locale locale = Locale.US; // Locale specifies the human language to use in determining day-of-week name (Tuesday in English versus Mardi in French).
DateTimeFormatter formatterOutput = DateTimeFormat.forPattern( "E" ).withLocale( locale );
String output = formatterOutput.print( localDate ); // 'E' is code for abbreviation of day-of-week name. See Joda-Time doc.
String outputQuébécois = formatterOutput.withLocale( Locale.CANADA_FRENCH ).print( localDate );
ถ่ายโอนข้อมูลไปยังคอนโซล
System.out.println( "input: " + input );
System.out.println( "localDate: " + localDate ); // Defaults to ISO 8601 formatted strings.
System.out.println( "dayOfWeek: " + dayOfWeek );
System.out.println( "output: " + output );
System.out.println( "outputQuébécois: " + outputQuébécois );
เมื่อวิ่ง
input: 23/2/2010
localDate: 2010-02-23
dayOfWeek: 2
output: Tue
outputQuébécois: mar.
java.timeกรอบถูกสร้างขึ้นใน Java 8 และต่อมา ชั้นเรียนเหล่านี้แย่งลำบากเก่ามรดกเรียนวันที่เวลาเช่นjava.util.Date
, และCalendar
SimpleDateFormat
Joda เวลาโครงการขณะนี้อยู่ในโหมดการบำรุงรักษาให้คำแนะนำแก่การโยกย้ายไปยังjava.timeชั้นเรียน
ต้องการเรียนรู้เพิ่มเติมโปรดดูที่ออราเคิลกวดวิชา และค้นหา Stack Overflow สำหรับตัวอย่างและคำอธิบายมากมาย สเปคคือJSR 310310
จะรับคลาส java.time ได้ที่ไหน?
โครงการThreeTen-Extraขยาย java.time ด้วยคลาสเพิ่มเติม โครงการนี้เป็นพื้นฐานที่พิสูจน์ได้สำหรับการเพิ่มเติมในอนาคตไปยัง java.time คุณอาจพบว่าการเรียนที่มีประโยชน์บางอย่างที่นี่เช่นInterval
, YearWeek
, YearQuarter
และอื่น ๆ อีกมากมาย
การใช้java.time
เฟรมเวิร์กใน Java 8 และใหม่กว่า
enumสามารถสร้าง String ชื่อของวันที่มีการแปลโดยอัตโนมัติไปยังภาษามนุษย์และบรรทัดฐานทางวัฒนธรรมของ ระบุ a เพื่อระบุว่าคุณต้องการชื่อแบบยาวหรือตัวย่อDayOfWeek
Locale
TextStyle
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.time.format.TextStyle
import java.util.Locale
import java.time.DayOfWeek;
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d/M/yyyy");
LocalDate date = LocalDate.parse("23/2/2010", formatter); // LocalDate = 2010-02-23
DayOfWeek dow = date.getDayOfWeek(); // Extracts a `DayOfWeek` enum object.
String output = dow.getDisplayName(TextStyle.SHORT, Locale.US); // String = Tue
คุณสามารถลองรหัสต่อไปนี้:
import java.time.*;
public class Test{
public static void main(String[] args) {
DayOfWeek dow = LocalDate.of(2010,Month.FEBRUARY,23).getDayOfWeek();
String s = String.valueOf(dow);
System.out.println(String.format("%.3s",s));
}
}
LocalDate
? คุณได้อ่านสิ่งเหล่านั้นก่อนโพสต์หรือไม่?
public class TryDateFormats {
public static void main(String[] args) throws ParseException {
String month = "08";
String day = "05";
String year = "2015";
String inputDateStr = String.format("%s/%s/%s", day, month, year);
Date inputDate = new SimpleDateFormat("dd/MM/yyyy").parse(inputDateStr);
Calendar calendar = Calendar.getInstance();
calendar.setTime(inputDate);
String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();
System.out.println(dayOfWeek);
}
}
สำหรับJava 8 หรือใหม่กว่าLocaldateจะดีกว่า
import java.time.LocalDate;
public static String findDay(int month, int day, int year) {
LocalDate localDate = LocalDate.of(year, month, day);
java.time.DayOfWeek dayOfWeek = localDate.getDayOfWeek();
System.out.println(dayOfWeek);
return dayOfWeek.toString();
}
หมายเหตุ:ถ้าใส่เป็นสตริง / ผู้ใช้กำหนดแล้วคุณควรจะแยกลงในint
...
import java.time.LocalDate;
...
//String month = in.next();
int mm = in.nextInt();
//String day = in.next();
int dd = in.nextInt();
//String year = in.next();
int yy = in.nextInt();
in.close();
LocalDate dt = LocalDate.of(yy, mm, dd);
System.out.print(dt.getDayOfWeek());
อีกวิธีที่ "สนุก" คือการใช้อัลกอริทึม Doomsdayอัลกอริทึมวันโลกาวินาศมันเป็นวิธีที่ยาวกว่า แต่ก็เร็วขึ้นถ้าคุณไม่ต้องการสร้างวัตถุปฏิทินด้วยวันที่ที่กำหนด
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
/**
*
* @author alain.janinmanificat
*/
public class Doomsday {
public static HashMap<Integer, ArrayList<Integer>> anchorDaysMap = new HashMap<>();
public static HashMap<Integer, Integer> doomsdayDate = new HashMap<>();
public static String weekdays[] = new DateFormatSymbols(Locale.FRENCH).getWeekdays();
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws ParseException, ParseException {
// Map is fed manually but we can use this to calculate it : http://en.wikipedia.org/wiki/Doomsday_rule#Finding_a_century.27s_anchor_day
anchorDaysMap.put(Integer.valueOf(0), new ArrayList<Integer>() {
{
add(Integer.valueOf(1700));
add(Integer.valueOf(2100));
add(Integer.valueOf(2500));
}
});
anchorDaysMap.put(Integer.valueOf(2), new ArrayList<Integer>() {
{
add(Integer.valueOf(1600));
add(Integer.valueOf(2000));
add(Integer.valueOf(2400));
}
});
anchorDaysMap.put(Integer.valueOf(3), new ArrayList<Integer>() {
{
add(Integer.valueOf(1500));
add(Integer.valueOf(1900));
add(Integer.valueOf(2300));
}
});
anchorDaysMap.put(Integer.valueOf(5), new ArrayList<Integer>() {
{
add(Integer.valueOf(1800));
add(Integer.valueOf(2200));
add(Integer.valueOf(2600));
}
});
//Some reference date that always land on Doomsday
doomsdayDate.put(Integer.valueOf(1), Integer.valueOf(3));
doomsdayDate.put(Integer.valueOf(2), Integer.valueOf(14));
doomsdayDate.put(Integer.valueOf(3), Integer.valueOf(14));
doomsdayDate.put(Integer.valueOf(4), Integer.valueOf(4));
doomsdayDate.put(Integer.valueOf(5), Integer.valueOf(9));
doomsdayDate.put(Integer.valueOf(6), Integer.valueOf(6));
doomsdayDate.put(Integer.valueOf(7), Integer.valueOf(4));
doomsdayDate.put(Integer.valueOf(8), Integer.valueOf(8));
doomsdayDate.put(Integer.valueOf(9), Integer.valueOf(5));
doomsdayDate.put(Integer.valueOf(10), Integer.valueOf(10));
doomsdayDate.put(Integer.valueOf(11), Integer.valueOf(7));
doomsdayDate.put(Integer.valueOf(12), Integer.valueOf(12));
long time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
//Get a random date
int year = 1583 + new Random().nextInt(500);
int month = 1 + new Random().nextInt(12);
int day = 1 + new Random().nextInt(7);
//Get anchor day and DoomsDay for current date
int twoDigitsYear = (year % 100);
int century = year - twoDigitsYear;
int adForCentury = getADCentury(century);
int dd = ((int) twoDigitsYear / 12) + twoDigitsYear % 12 + (int) ((twoDigitsYear % 12) / 4);
//Get the gap between current date and a reference DoomsDay date
int referenceDay = doomsdayDate.get(month);
int gap = (day - referenceDay) % 7;
int result = (gap + adForCentury + dd) % 7;
if(result<0){
result*=-1;
}
String dayDate= weekdays[(result + 1) % 8];
//System.out.println("day:" + dayDate);
}
System.out.println("time (ms) : " + (System.currentTimeMillis() - time)); //time (ms) : 80
time = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
Calendar c = Calendar.getInstance();
//I should have used random date here too, but it's already slower this way
c.setTime(new SimpleDateFormat("dd/MM/yyyy").parse("12/04/1861"));
// System.out.println(new SimpleDateFormat("EE").format(c.getTime()));
int result2 = c.get(Calendar.DAY_OF_WEEK);
// System.out.println("day idx :"+ result2);
}
System.out.println("time (ms) : " + (System.currentTimeMillis() - time)); //time (ms) : 884
}
public static int getADCentury(int century) {
for (Map.Entry<Integer, ArrayList<Integer>> entry : anchorDaysMap.entrySet()) {
if (entry.getValue().contains(Integer.valueOf(century))) {
return entry.getKey();
}
}
return 0;
}
}
สามารถใช้ข้อมูลโค้ดต่อไปนี้สำหรับการป้อนข้อมูลเช่น (day = "08", month = "05", year = "2015" และผลลัพธ์จะเป็น "WEDNESDAY")
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DAY_OF_MONTH, Integer.parseInt(day));
calendar.set(Calendar.MONTH, (Integer.parseInt(month)-1));
calendar.set(Calendar.YEAR, Integer.parseInt(year));
String dayOfWeek = calendar.getDisplayName(Calendar.DAY_OF_WEEK, Calendar.LONG, Locale.US).toUpperCase();
คำตอบหนึ่งบรรทัด:
return LocalDate.parse("06/02/2018",DateTimeFormatter.ofPattern("dd/MM/yyyy")).getDayOfWeek().name();
ตัวอย่างการใช้งาน:
public static String getDayOfWeek(String date){
return LocalDate.parse(date, DateTimeFormatter.ofPattern("dd/MM/yyyy")).getDayOfWeek().name();
}
public static void callerMethod(){
System.out.println(getDayOfWeek("06/02/2018")); //TUESDAY
}
private String getDay(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
//System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());
return simpleDateFormat.format(date).toUpperCase();
}
private String getDay(String dateStr){
//dateStr must be in DD-MM-YYYY Formate
Date date = null;
String day=null;
try {
date = new SimpleDateFormat("DD-MM-YYYY").parse(dateStr);
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("EEEE");
//System.out.println("DAY "+simpleDateFormat.format(date).toUpperCase());
day = simpleDateFormat.format(date).toUpperCase();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return day;
}
LocalDate date=LocalDate.now();
System.out.println(date.getDayOfWeek());//prints THURSDAY
System.out.println(date.getDayOfWeek().getDisplayName(TextStyle.SHORT, Locale.US) ); //prints Thu
java.time.DayOfWeek is a enum which returns the singleton instance for the day-of-week of the weekday of the date.
มีความท้าทายเกี่ยวกับแฮกเกอร์ธนาคารJava วันที่และเวลา
ส่วนตัวฉันชอบชั้น LocalDate
มีวิดีโอหนึ่งเรื่องเกี่ยวกับความท้าทายนี้
โซลูชัน Java วันที่และเวลาแฮกเกอร์
ฉันหวังว่ามันจะช่วย :)
Calendar
ชั้นโปรดทราบว่าset
วิธีการในปฏิทินเวลาเดือนเริ่มต้นจาก 0. 0 for January
คือ ขอบคุณ!
การเพิ่มวิธีอื่นในการทำสิ่งที่ OP ต้องการโดยไม่ต้องใช้วิธีการ inbuilt ล่าสุด:
public static String getDay(String inputDate) {
String dayOfWeek = null;
String[] days = new String[]{"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"};
try {
SimpleDateFormat format1 = new SimpleDateFormat("dd/MM/yyyy");
Date dt1 = format1.parse(inputDate);
dayOfWeek = days[dt1.getDay() - 1];
} catch(Exception e) {
System.out.println(e);
}
return dayOfWeek;
}
SimpleDateFormat
Date
โดยเฉพาะอย่างยิ่งคุณไม่ควรใช้getDay
วิธีที่คัดค้านมันไม่น่าเชื่อถือ และคุณไม่ควรใช้if
- else
สำหรับการเลือกในหมู่ 7 ค่านี้สิ่งที่เรามีswitch
หรือคุณอาจจะใช้อาร์เรย์ รหัสทั้งหมดของคุณนั้นมีความยาวและซับซ้อนกว่าที่คุณต้องการ
import java.text.SimpleDateFormat;
import java.util.Scanner;
class DayFromDate {
public static void main(String args[]) {
System.out.println("Enter the date(dd/mm/yyyy):");
Scanner scan = new Scanner(System.in);
String Date = scan.nextLine();
try {
boolean dateValid = dateValidate(Date);
if(dateValid == true) {
SimpleDateFormat df = new SimpleDateFormat( "dd/MM/yy" );
java.util.Date date = df.parse( Date );
df.applyPattern( "EEE" );
String day= df.format( date );
if(day.compareTo("Sat") == 0 || day.compareTo("Sun") == 0) {
System.out.println(day + ": Weekend");
} else {
System.out.println(day + ": Weekday");
}
} else {
System.out.println("Invalid Date!!!");
}
} catch(Exception e) {
System.out.println("Invalid Date Formats!!!");
}
}
static public boolean dateValidate(String d) {
String dateArray[] = d.split("/");
int day = Integer.parseInt(dateArray[0]);
int month = Integer.parseInt(dateArray[1]);
int year = Integer.parseInt(dateArray[2]);
System.out.print(day + "\n" + month + "\n" + year + "\n");
boolean leapYear = false;
if((year % 4 == 0) && (year % 100 != 0) || (year % 400 == 0)) {
leapYear = true;
}
if(year > 2099 || year < 1900)
return false;
if(month < 13) {
if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12) {
if(day > 31)
return false;
} else if(month == 4 || month == 6 || month == 9 || month == 11) {
if(day > 30)
return false;
} else if(leapYear == true && month == 2) {
if(day > 29)
return false;
} else if(leapYear == false && month == 2) {
if(day > 28)
return false;
}
return true;
} else return false;
}
}
โปรแกรมเพื่อค้นหาวันในสัปดาห์โดยให้วันที่ป้อนข้อมูลของผู้ใช้เดือนและปีโดยใช้java.util.scanner
แพ็คเกจ:
import java.util.Scanner;
public class Calender {
public static String getDay(String day, String month, String year) {
int ym, yp, d, ay, a = 0;
int by = 20;
int[] y = new int[]{6, 4, 2, 0};
int[] m = new int []{0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
String[] wd = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
int gd = Integer.parseInt(day);
int gm = Integer.parseInt(month);
int gy = Integer.parseInt(year);
ym = gy % 100;
yp = ym / 4;
ay = gy / 100;
while (ay != by) {
by = by + 1;
a = a + 1;
if(a == 4) {
a = 0;
}
}
if ((ym % 4 == 0) && (gm == 2)) {
d = (gd + m[gm - 1] + ym + yp + y[a] - 1) % 7;
} else
d = (gd + m[gm - 1] + ym + yp + y[a]) % 7;
return wd[d];
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String day = in.next();
String month = in.next();
String year = in.next();
System.out.println(getDay(day, month, year));
}
}
java.util.Date
, java.util.Calendar
และjava.text.SimpleDateFormat
ตอนนี้มรดกแทนที่โดยjava.timeชั้นเรียนที่สร้างขึ้นใน Java 8 และ Java 9 โปรดดูที่การสอนโดยออราเคิล
if ((ym%4==0) && (gm==2)){ d=(gd+m[gm-1]+ym+yp+y[a]-1)%7;
Calendar cal = Calendar.getInstance(desired date);
cal.setTimeInMillis(System.currentTimeMillis());
int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
รับค่าวันด้วยการระบุการประทับเวลาปัจจุบัน
//to get day of any date
import java.util.Scanner;
import java.util.Calendar;
import java.util.Date;
public class Show {
public static String getDay(String day,String month, String year){
String input_date = month+"/"+day+"/"+year;
Date now = new Date(input_date);
Calendar calendar = Calendar.getInstance();
calendar.setTime(now);
int final_day = (calendar.get(Calendar.DAY_OF_WEEK));
String finalDay[]={"SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"};
System.out.println(finalDay[final_day-1]);
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String month = in.next();
String day = in.next();
String year = in.next();
getDay(day, month, year);
}
}
วิธีการด้านล่างดึงเจ็ดวันและส่งกลับชื่อสั้น ๆ ของวันใน List Array ใน Kotlin แต่คุณสามารถฟอร์แมตใหม่แล้วในรูปแบบ Java นำเสนอแนวคิดว่าปฏิทินสามารถส่งคืนชื่อสั้น ๆ ได้อย่างไร
private fun getDayDisplayName():List<String>{
val calendar = Calendar.getInstance()
val dates= mutableListOf<String>()
dates.clear()
val s= calendar.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US)
dates.add(s)
for(i in 0..5){
calendar.roll( Calendar.DATE, -1)
dates.add(calendar.getDisplayName(DAY_OF_WEEK, SHORT, Locale.US))
}
return dates.toList()
}
ออกผลใส่เช่น
I/System.out: Wed
Tue
Mon
Sun
I/System.out: Sat
Fri
Thu
Calendar
คลาสในปี 2019 มันออกแบบมาไม่ดีและล้าสมัยไปนาน แต่ผมขอแนะนำให้LocalDate
และDayOfWeek
จากjava.time ทันสมัย Java วันที่และเวลา API
คุณสามารถใช้วิธีการด้านล่างเพื่อรับวันในสัปดาห์โดยผ่านวันที่ระบุ
ที่นี่สำหรับวิธีการตั้งค่าของคลาสปฏิทินส่วนที่ยุ่งยากคือดัชนีสำหรับพารามิเตอร์ประจำเดือนจะเริ่มจาก 0
public static String getDay(int day, int month, int year) {
Calendar cal = Calendar.getInstance();
if(month==1){
cal.set(year,0,day);
}else{
cal.set(year,month-1,day);
}
int dow = cal.get(Calendar.DAY_OF_WEEK);
switch (dow) {
case 1:
return "SUNDAY";
case 2:
return "MONDAY";
case 3:
return "TUESDAY";
case 4:
return "WEDNESDAY";
case 5:
return "THURSDAY";
case 6:
return "FRIDAY";
case 7:
return "SATURDAY";
default:
System.out.println("GO To Hell....");
}
return null;
}
คลาสปฏิทินมีฟังก์ชันการทำงาน displayName ในตัว:
Calendar.getInstance().getDisplayName(Calendar.DAY_OF_WEEK, Calendar.SHORT, Locale.getDefault()); // Thu
Calendar.SHORT -> Thu
Calendar.LONG_FORMAT -> Thursday
มีให้ตั้งแต่ Java 1.6 ดูเอกสารของ Oracle
ทำงานอย่างถูกต้อง ...
java.time.LocalDate; //package related to time and date
มันให้วิธีการ inbuilt getDayOfWeek () เพื่อรับวันในสัปดาห์ที่เฉพาะเจาะจง:
int t;
Scanner s = new Scanner(System.in);
t = s.nextInt();
s.nextLine();
while(t-->0) {
int d, m, y;
String ss = s.nextLine();
String []sss = ss.split(" ");
d=Integer.parseInt(sss[0]);
m = Integer.parseInt(sss[1]);
y = Integer.parseInt(sss[2]);
LocalDate l = LocalDate.of(y, m, d); //method to get the localdate instance
System.out.println(l.getDayOfWeek()); //this returns the enum DayOfWeek
ในการกำหนดค่าของ enum l.getDayOfWeek()
ให้กับสตริงคุณอาจใช้วิธีการ Enum ที่เรียกname()
ว่าคืนค่าของวัตถุ enum
listHolidays.add(LocalDate.of(year, 1, 1));
ไปยังคำตอบ หากคุณต้องการปรับปรุงคำตอบคุณควรเพิ่มของคุณเอง หวังว่าจะช่วยได้
ด้านล่างเป็นตัวอย่างข้อมูลสองบรรทัดโดยใช้ Java 1.8 Time API สำหรับความต้องการของคุณ
LocalDate localDate = LocalDate.of(Integer.valueOf(year),Integer.valueOf(month),Integer.valueOf(day));
String dayOfWeek = String.valueOf(localDate.getDayOfWeek());