Java得到半个月的数字
我想从一个日期开始得到一年中半个月的od数。 例如,我有2012年3月13日,结果是6日 我已尝试使用Calendar类,但无法正常工作:Java得到半个月的数字,java,date,calendar,Java,Date,Calendar,我想从一个日期开始得到一年中半个月的od数。 例如,我有2012年3月13日,结果是6日 我已尝试使用Calendar类,但无法正常工作: Calendar cal = (GregorianCalendar) Calendar.getInstance(); cal.set(Calendar.DAY_OF_MONTH,13); cal.set(Calendar.MONTH, 2); cal.set(Calendar.YEAR, 2012); int week
Calendar cal = (GregorianCalendar) Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH,13);
cal.set(Calendar.MONTH, 2);
cal.set(Calendar.YEAR, 2012);
int weekNum = cal.get(Calendar.WEEK_OF_YEAR);
System.out.println("Weeknum:" + ((weekNum/2)));
有人能帮我吗
Calendar cal = (GregorianCalendar) Calendar.getInstance();
cal.set(Calendar.DAY_OF_MONTH,13);
cal.set(Calendar.MONTH, 2);
cal.set(Calendar.YEAR, 2012);
int hafMonthCount = cal.get(Calendar.DAY_OF_YEAR) / 14 ;
//here you must multiply by 2 :)
System.out.println("HalfMonthCount:" + hafMonthCount );
---更新
由于您使用的概念不是用Java实现的(在法语中,我们有14天的quizaine概念,但在英语中,我不能说),您必须自己计算它。假设此处定义的半月:
通过示例显示代码发生了什么的详细信息。假设我们有以下四个不同的
年中的周值
:
WEEK_OF_YEAR: 1
WEEK_OF_YEAR: 2
WEEK_OF_YEAR: 3
WEEK_OF_YEAR: 4
如果我们将这些值除以2会发生什么
WEEK_OF_YEAR: 1 (weekNum/2) = 1/2 = 0
WEEK_OF_YEAR: 2 (weekNum/2) = 2/2 = 1
WEEK_OF_YEAR: 3 (weekNum/2) = 3/2 = 1
WEEK_OF_YEAR: 4 (weekNum/2) = 4/2 = 2
因此,代码的问题是,它将在一年的第一周产生一个值0。因此,您希望在代码中执行的操作是将(weekNum/2)
替换为((weekNum+1)/2)
如果要使用(不要与an混淆),则正确。但是现在我们有了更多的现代类,java.time类
LocalDate
该类表示一个仅限日期的值,不包含一天中的时间和时区
时区对于确定日期至关重要。在任何一个特定的时刻,世界各地的日期都因地区而异。例如,法国巴黎午夜过后几分钟是新的一天,而魁北克山仍然是“昨天”
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate ld = LocalDate.now( z );
获取月份编号,1-12月份为1-12
int monthNumber = ld.getMonthValue(); // 1-12.
将该月数乘以2,因为每个月有两个半月。如果在月初,减去1(例如,6变为5)
我没有运行那段代码,只是从头开始输入。使用风险自负,如有需要请修复
关于java.time
该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,如java.util.date
,.Calendar
,&java.text.SimpleDateFormat
该项目现已启动,建议迁移到java.time
要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释
大部分java.time功能都在中向后移植到java 6和7,并进一步适应于中(请参阅)
该项目使用其他类扩展了java.time。这个项目是java.time将来可能添加的一个试验场。您可以在这里找到一些有用的类,如
Interval
、YearWeek
、YearQuarter
,等等。您希望得到什么结果?什么是“半个星期”?你不是应该乘以2吗?我想要6作为结果,但我有5(半个星期是14天)。@Snicolas,如果我乘以2,我有10,错误结果的两倍。啊,对不起:)我很快改变了主题名。好的,但我的结果仍然是5。你必须在hfMonthCount中加1。或者可以使用周中的天来调整值。这个解决方案不同于(在我看来)他试图实现的结果。如果我理解的话,他希望当一年中的周数为1或2时,hfMonthCount的结果为1。当一年中的第三周或第四周是第二周。您的解决方案无法做到这一点。您的解决方案只有在一年的第一天是星期一(或您所在地区的一周开始的任何一天)时才有效。我在前面的评论中所说的示例:假设:在您所在地区,一周从星期一开始,而今年的第一天是星期四。如果使用您的解决方案,则(一年中的)第13天将是前半个月的一部分。然而,第13天是星期二,因此3:d周已经开始,“半个月”的数字应该是2。这个代码有点奇怪。您应该除以2,而不是当前月份的数字。因为示例日期是2月,所以这恰好有效,但对于任何其他月份,它都会失败。我的错。简单地假设这个月是以1为基础的,因为一年中的天和一年中的周都是以1为基础的。我想知道在同一个API中混合基于0和基于1的变量的原因是什么。。。
int monthNumber = ld.getMonthValue(); // 1-12.
int adjustment = ( ld.getDayOfMonth() < 16 ) ? 1 : 0 ; // If first half of month, back off the half-month-number by 1.
int halfMonthNumber = ( ( monthNumber * 2 ) - adjustment ); // 1-24.
int index = ( halfMonthNumber - 1 ); // Subtract one for zero-based counting.
String alphaCode = "ABCDEFGHJKLMNOPQRSTUVWXY".substring( index , index + 1 );