当前位置: 首页 > 知识库问答 >
问题:

错误获取星期几

丌官坚秉
2023-03-14

我想从这个函数中获取星期几(星期一,星期二,...),该函数接收参数3 int,即年份、月份和日期,我已经尝试了Calendar和GregorianCalendar,但它仍然给我错误,例如,如果我今天通过日期(2017,11,04)它给我一周中第5天的结果,星期四是今天星期二,我给你留下代码

String diaSemana (int dia, int mes, int ano)
{
    String letraD="";
    /*Calendar c = Calendar.getInstance();
    c.set(ano, mes, dia, 0, 0, 0);
    nD=c.get(Calendar.DAY_OF_WEEK);*/
    TimeZone timezone = TimeZone.getDefault();
    Calendar calendar = new GregorianCalendar(timezone);
    calendar.set(ano, mes, dia);
    int nD=calendar.get(Calendar.DAY_OF_WEEK);
    Log.i("result","diaSemana: "+nD+" dia:"+dia+" mes:"+mes+ "año:" +ano);
    switch (nD){
            case 0: letraD = "D";
                break;
            case 1: letraD = "L";
                break;
            case 2: letraD = "M";
                break;
            case 3: letraD = "X";
                break;
            case 4: letraD = "J";
                break;
            case 5: letraD = "V";
                break;
            case 6: letraD = "S";
                break;
        }

        return letraD;
}

Log. i显示此消息:

DiaSemana:5 dias:11 mes:4 año:2017

共有3个答案

邵胜涝
2023-03-14

试试这个:

Calendar calendar = GregorianCalendar.getInstance();

否则日历变量不会初始化并设置为默认值。这意味着你得到了错误的日期。

然而,在获得领域时,你做得对。

请注意:星期几从周日开始。如果您按CTRL左键单击DAY_OF_WEEK您会看到详细信息。

/**
 * Field number for <code>get</code> and <code>set</code> indicating the day
 * of the week.  This field takes values <code>SUNDAY</code>,
 * <code>MONDAY</code>, <code>TUESDAY</code>, <code>WEDNESDAY</code>,
 * <code>THURSDAY</code>, <code>FRIDAY</code>, and <code>SATURDAY</code>.
 *
 * @see #SUNDAY
 * @see #MONDAY
 * @see #TUESDAY
 * @see #WEDNESDAY
 * @see #THURSDAY
 * @see #FRIDAY
 * @see #SATURDAY
 */

尽管如此,如果你使用GregoriaCalendar,它可能从周一开始。但是你需要注意的是,第一天不是0,一周的第一天从1开始。这是它在周日所说的:

/**
 * Value of the {@link #DAY_OF_WEEK} field indicating
 * Sunday.
 */
public final static int SUNDAY = 1;

星期一是2号,以此类推。

然而,这可能会因设备设置为一周的第一天而有所不同。添加一些日志标签,然后在更改日历获取方式后查看它是什么(参见本答案中的第一行代码)

莘绍元
2023-03-14

问题是月份以0开头:一月=0,二月=1等。使用这个:

calendar.set(ano, mes - 1, dia);
夏侯瑞
2023-03-14

我知道你在android上标记了你的问题,我知道我在解决方案中使用的LocalDate类还没有内置在android上(它会出现)。要在Android上使用此功能,请获取ThreeTenABP,查看如何在Android项目中使用ThreeTenABP。要在Java8或更高版本上使用它,请继续,一切都是内置的。

static Locale español = Locale.forLanguageTag("es");

static String diaSemana (int dia, int mes, int ano)
{
    return LocalDate.of(ano, mes, dia)
            .getDayOfWeek()
            .getDisplayName(TextStyle.NARROW, español);
}

会这么简单吗?让我们用下个月第一个整周的几天来测试它:

    for (int dia = 2; dia <= 8; dia++) {
        System.out.format(español, "%-2s%2d%n", diaSemana(dia, 7, 2017), dia);
    }

这张照片

D  2
L  3
M  4
X  5
J  6
V  7
S  8

尽管星期三在西班牙语中是miercoles,但我相信印刷的信完全同意你的要求。

对于非Android程序员来说,Calendar类及其子类GregorianCalendar早就过时了。他们更好、更适合程序员的替代品在2014年推出了Java8。幸运的是,它们也被反向移植到Java6和7,特别是Android。对于初学者来说,较新的类对月份数字没有什么有趣的惊喜,你也不需要关心一周中几天的编号。

 类似资料:
  • 问题内容: 如何获得当前一周的星期一和星期五的日期? 我有以下代码,但是如果当前日期是星期日或星期六,则它将失败。 问题答案: 这些strtotime输入效果很好: 您需要做的就是将逻辑包装在一些if语句中。

  • 问题内容: 如何获得给定星期几的第一天? 例如,当我写这篇文章时,我们在 WEEK 29。* 我想编写一个MySQL查询,它将使用 WEEKNO 29 作为唯一可用参数返回 7月18日星期日 。 * 问题答案: 您可以使用: 这将为您提供2010年第3周的星期一日期,即2010-01-18。 另一个例子: 请给您2010年第52周的星期日日期,即2010-12-26。 最后,使用原始示例: 这给出

  • 问题内容: 我创建了一个方法,该方法应该采用“ YYYY-MM- DD”形式的字符串,并吐出一个int,该int表示相对于它所在的星期的日期位置(无论两个月之间是否重叠)。因此,例如,sunday = 1 monday = 2,依此类推。 这是我的代码: 我知道这是错误的,但是我尝试了大多数逻辑组合。并且也搞砸了二手或二手。 这是我使用方式的选择: 我不清楚,因为没有DayOfWeekUnit选项

  • 问题内容: 我已经实现了一种获取当前星期中星期一的日期的方法,并且已经将星期一指定为星期的第一天。 但是,无论我做什么,它都会返回2013年3月24日格林尼治标准时间。我看不到这里的问题。有人能帮忙吗? 问题答案: 试试这个 :

  • 问题内容: 我有当前日期,还有一个常数,它指示星期几。我想基于该常数获取一周的开始日期。如果我将一周的第一天硬编码为星期一(或其他任何东西),那么这很简单。但是一周的第一天一直在变化。因此,我不想在每次更改第一天时都更改代码。 这是我尝试使用Java的Calendar的方法: 我想获取一周的开始日期。上面的函数返回星期的第一天,并且星期开始日期被硬编码为星期六。每当星期开始日期以上的要求发生变化时

  • 问题内容: 我有一个小程序,从今天开始显示当前的一周,像这样: 然后是显示周数的JLabel: 因此,现在我想拥有一个JTextField,您可以在其中输入日期,而JLabel将使用该日期的星期数进行更新。我真的不确定如何做到这一点,因为我是Java的新手。我需要将输入另存为字符串吗?一个整数?它将是什么格式(yyyyMMdd等)?如果有人可以帮助我,我将不胜感激! 问题答案: 我需要将输入另存为