gpt4 book ai didi

java - 使用 Calendar 类获取 Java 中特定日期的星期几作为字符串

转载 作者:行者123 更新时间:2023-12-01 07:46:21 28 4
gpt4 key购买 nike

我想用 Java 来做这个简单的事情。正确答案应该是“星期三”。这有什么问题吗?我从 Calendar 类的文档中获取了示例。

import java.util.*;
import java.lang.Integer;

class Dumb {
public static List<String> dows = Collections.unmodifiableList(Arrays.asList("SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY"));

public static String getDay(String day, String month, String year) {
// get the supported ids for GMT-08:00 (Pacific Standard Time)
String[] ids = TimeZone.getAvailableIDs(-8 * 60 * 60 * 1000);
// if no ids were returned, something is wrong. get out.
if (ids.length == 0)
System.exit(0);
// create a Pacific Standard Time time zone
SimpleTimeZone pdt = new SimpleTimeZone(-8 * 60 * 60 * 1000, ids[0]);
// set up rules for Daylight Saving Time
pdt.setStartRule(Calendar.APRIL, 1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);
pdt.setEndRule(Calendar.OCTOBER, -1, Calendar.SUNDAY, 2 * 60 * 60 * 1000);

// create a GregorianCalendar with the Pacific Daylight time zone
// and the desired date and time
Calendar calendar = new GregorianCalendar(pdt);
calendar.set(Calendar.MONTH, Integer.valueOf(month));
calendar.set(Calendar.DAY_OF_MONTH, Integer.valueOf(day));
calendar.set(Calendar.YEAR, Integer.valueOf(year));

// print out a bunch of interesting things
System.out.println("SUNDAY: " + calendar.SUNDAY);
System.out.println("MONDAY: " + calendar.MONDAY);
System.out.println("TUESDAY: " + calendar.TUESDAY);
System.out.println("WEDNESDAY: " + calendar.WEDNESDAY);
System.out.println("THURSDAY: " + calendar.THURSDAY);
System.out.println("FRIDAY: " + calendar.FRIDAY);
System.out.println("SATURDAY: " + calendar.SATURDAY);
System.out.println("YEAR: " + calendar.get(Calendar.YEAR));
System.out.println("MONTH: " + calendar.get(Calendar.MONTH));
System.out.println("DATE: " + calendar.get(Calendar.DATE));
System.out.println("DAY_OF_WEEK: " + calendar.get(Calendar.DAY_OF_WEEK));
int dow = calendar.get(Calendar.DAY_OF_WEEK);
return dows.get(dow-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();

System.out.println(getDay(day, month, year));
}

}

此代码产生以下输出:

SUNDAY: 1 
MONDAY: 2
TUESDAY: 3
WEDNESDAY: 4
THURSDAY: 5
FRIDAY: 6
SATURDAY: 7
YEAR: 2015
MONTH: 8
DATE: 5
DAY_OF_WEEK: 7
SATURDAY

最佳答案

tl;博士

get day of week as a string for a particular date

  • 你工作太辛苦了。
  • 您使用了错误的类。

我们可以将您的代码简化为一行:

LocalDate.of(                    // A date-only value, without time-of-day, without time zone.
Integer.valueOf( "2018" ) , // Sane numbering. Ex: number `2018` is year 2018.
Integer.valueOf( "1" ) , // Sane numbering. Months 1-12 are January-December.
Integer.valueOf( "23" )
) // Returns a `LocalDate` object.
.getDayOfWeek() // Returns a `DayOfWeek` enum object.
.getDisplayName( // Calls a method on the enum object to automatically localize the name of the day-of-week.
TextStyle.FULL , // Specify how long or abbreviated.
Locale.US // Locale determines the human language and cultural norms used in localization.
)

查看此code run live at IdeOne.com .

Tuesday

我建议在处理此类代码之前先搜索 Stack Overflow。这个话题已经被问过很多次并得到了回答。

java.time

您正在使用非常麻烦的类,这些类在几年前就被 java.time 类取代了。永远不要再接触那些遗留类。

将输入字符串解析为仅日期值,没有时间,没有时区。那将是一个 LocalDate 对象。

LocalDate ld = LocalDate.of(
Integer.valueOf( y ) , // Sane numbering. Ex: number `2018` is year 2018.
Integer.valueOf( m ) , // Sane numbering. Months 1-12 are January-December.
Integer.valueOf( d )
) ;

使用方便的 DayOfWeek 获取星期几枚举。该类预定义了七个对象,一个代表一周中的每一天。您还会在该类上找到一些方便的方法,例如下面使用的本地化功能。

Java 拥有极其强大且灵活的枚举功能。如果不熟悉,请研究 Oracle Tutorial .

DayOfWeek dow = ld.getDayOfWeek() ; 

生成一个带有星期几名称的字符串。无需硬编码英语。让java.time自动为您本地化。

要本地化,请指定:

  • TextStyle确定字符串的长度或缩写。
  • Locale确定:
    • 用于翻译日名、月名等的人类语言
    • 决定缩写、大写、标点符号、分隔符等问题的文化规范

示例:

Locale l = Locale.CANADA_FRENCH ;  // Or, Locale.UK, Locale.US, etc.
String output = dow.getDisplayName( TextStyle.FULL , l ) ;
<小时/>

关于java.time

java.time框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧类 legacy日期时间类,例如 java.util.Date , Calendar , & SimpleDateFormat .

Joda-Time项目,现在位于 maintenance mode ,建议迁移到java.time类。

要了解更多信息,请参阅 Oracle Tutorial 。并在 Stack Overflow 上搜索许多示例和解释。规范为JSR 310 .

您可以直接与数据库交换java.time对象。使用JDBC driver符合JDBC 4.2或稍后。不需要字符串,不需要 java.sql.* 类。

从哪里获取java.time类?

ThreeTen-Extra项目通过附加类扩展了 java.time。该项目是 java.time future 可能添加的内容的试验场。您可能会在这里找到一些有用的类,例如 Interval , YearWeek , YearQuarter ,和more .

关于java - 使用 Calendar 类获取 Java 中特定日期的星期几作为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51468086/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com