按编号获取当天的名称

时间:2014-01-14 11:09:16

标签: java formula

这可能是一个非常独特的问题,因为我已经在谷歌搜索了一段时间&无法找到解决方案。这也很有趣。

我需要的是一个数字,您可以通过它来获取日期名称。

例如我们的数字是7,我们需要通过一个公式来找出它的日期名称,但是对于7这是基本的,你所做的只是在switch语句中得到“saturday”。

基本上,获取名称很简单,您刚刚完成:

switch (dayNumber) {
    case 1: return "Sunday"; etc...

但我认为我的问题非常复杂,而且我不确定逻辑上是否有可能的解决方案。

我想通过数字获得一周的索引号。

的示例:

  • 第7天 - 指数:7
  • 第16天 - 指数:2(因为你计算前2周7 + 7 = 14然后+ 2 = 16所以这一天是星期一。
  • 第24天 - 指数:3

为什么我需要这个:

我最近在一个java课程中遇到了一个问题,与此无关,但它与整个月的循环有关,所以我想要有创意和甚至可以使用数学函数和公式快速获取特定日期的名称。

关于如何获得名称的示例:

for (int i = 1; i <= 31; i++) {
    System.out.println(getDayByInteger(i));
}

public static String getDayByInteger(int day) {
        int dayNumber = 0; //TODO Formula..
        switch (dayNumber) {
            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: return "N/A";
        }
    }

我不介意它是否只支持1-31的数字范围,但我的问题集中在是否可以使它适用于任何数字,因为你总是可以建立一个公式来适应特定的数字范围我想。

是否可以使用任何数字?或者它需要检查声明吗?

5 个答案:

答案 0 :(得分:3)

您只需使用modulu并编辑案例:

    switch (dayNumber%7) {
        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 0:                     //change case 7 to case 0
            return "Saturday";
        default: return "N/A";
    }

答案 1 :(得分:1)

您可以使用提醒操作符%进行此操作

public static String getDayByInteger(int day) {
    int dayNumber = (day % 7) + 1; 
    switch (dayNumber) {
        // case 1 to 7
    }
}

答案 2 :(得分:0)

试试这个:

public static String getDayByInteger(int day) {
    int dayNumber = day % 7; //  Formula..
    switch (dayNumber) {
    case 0:
        return "Sunday";
    case 1:
        return "Monday";
    case 2:
        return "Tuesday";
    case 3:
        return "Wednesday";
    case 4:
        return "Thursday";
    case 5:
        return "Friday";
    case 6:
        return "Saturday";
    default:
        return "N/A";
    }
}

答案 3 :(得分:0)

不清楚您的真实需求,如果您想了解特定日期的星期几,可以查看以下内容:How to find which day of the week it is - Java

答案 4 :(得分:0)

TL;博士

% 7

详细

Answer by kai对于数学部分是正确的,使用DayOfWeek。我使用ternary function将其合并为上面一条令人讨厌的行(请参阅上一节中的扩展代码)。

另一方面,获取日期名称,您可以使用java.time类使用Java内置的新功能。

DayOfWeek dow = DayOfWeek.of( 1 ); // Monday is # 1. 枚举

DayOfWeek enum为一周中的每个服务器日提供singleton个实例。

日期按照ISO 8601标准编号,周一至周日为1-7。

String output = DayOfWeek.MONDAY.getDisplayName( TextStyle.FULL , Locale.CANADA_FRENCH );  // Or Locale.US or Locale.ITALY etc.

DayOfWeek::getDisplayName方法将当天的名称翻译为Locale指定的任何人类语言,例如Locale.USLocale.CANADA_FRENCH

java.util.Date
  

Lundi将军

这种枚举的目的是使用这些对象而不是整数。而不是传递仅仅是整数,而是传递DayOfWeek之类的对象。这使您的代码更加自我记录,确保一系列有效值,并提供type-safety

java.time

java.time框架内置于Java 8及更高版本中。这些类取代了旧的麻烦日期时间类,例如.Calendarjava.text.SimpleDateFormat和&amp; Interval

现在位于Joda-Timemaintenance mode项目建议迁移到java.time。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。

大部分java.time功能都被反向移植到Java 6&amp; ThreeTen-Backport中的7,并进一步适应Android中的ThreeTenABP

ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如YearWeekYearQuarterint yourDayNumber = 8; // 1 = Sunday, 2 = Monday, … , 8 = Sunday, 9 = Monday, etc. int modResult = ( yourDayNumber % 7 ); int isoNumber = ( modResult - 1 ); if ( isoNumber < 1 ) { isoNumber = ( 7 + isoNumber ); } else { // Else modResult is 1-5 // No code needed here. } 等。

一周的第一天

如果您必须将星期日计为星期的第一天,请调整以获得ISO 8601值。

通过从代码中减去一个,我们在周一到周五获得1-5。这正是我们想要的ISO 8601号码。但是对于星期六我们得到-1而星期日我们得到0.我利用这个事实通过添加负一或零到七来得到所需的ISO数字6为星期六和7星期日。可能有一种更简洁的方法,但这种方法根据我的有限测试成功。

System.out.println ( "yourDayNumber: " + yourDayNumber + " | isoNumber: " + isoNumber + " | DayOfWeek: " + DayOfWeek.of ( isoNumber ) );

转储到控制台。

{{1}}