首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示月中每周的日子

显示月中每周的日子
EN

Stack Overflow用户
提问于 2017-11-29 13:00:06
回答 1查看 141关注 0票数 0
代码语言:javascript
复制
   public static void getWeeksOfMonth(int month, int year)
{
    SimpleDateFormat sdf = new SimpleDateFormat("EEEE dd-MMM-yyyy");
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.YEAR, year);
    cal.set(Calendar.MONTH, month);
    cal.set(Calendar.DAY_OF_MONTH, 1);

    int ndays = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
    System.out.println(ndays+"<<<ff" );

    for (int i = 1; i <= ndays; i++)
    {
        String day = sdf.format(cal.getTime());
        System.out.println(day+"<<<" );
        Log.e("quest", day+"<<<");
        if(i % 7 == 0){
            Log.e("question", "=======week days===========");
        }
        cal.add(Calendar.DATE, 1);
    }

}

输出

2017年11月4日星期六

2017年11月5日星期日

2017年11月6日星期一

2017年11月7日星期二

=======week days===========

2017年11月8日星期三

2017年11月9日星期四

2017年11月10日星期五

2017年11月11日星期六

2017年11月12日星期日

2017年11月13日星期一

2017年11月14日星期二

=======week days==========

2017年11月15日星期三

2017年11月16日星期四

2017年11月17日星期五

2017年11月18日星期六

2017年11月19日星期日

2017年11月20日星期一

2017年11月21日星期二

=======week days===========

2017年11月22日星期三

2017年11月23日星期四

2017年11月24日星期五

2017年11月25日星期六

2017年11月26日星期日

2017年11月27日星期一

2017年11月28日星期二

=======week days===========

2017年11月29日星期三

2017年11月30日星期四

1:-但是我想要完成上周到周二的

2:-从周五开始到周四结束

EN

回答 1

Stack Overflow用户

发布于 2018-07-22 21:08:28

使用java.time

您正在使用可怕的旧类,现在已被java.time类所取代。

YearMonth类表示整个月。

代码语言:javascript
复制
YearMonth ym = YearMonth.of( 2018 , Month.JANUARY ) ;

定义输出字符串的格式。

代码语言:javascript
复制
Locale locale = Locale.US ; 
DateTimeFormatter f = DateTimeFormatter.ofPattern( 
    "EEEE dd-MMM-uuuu" ,
    locale 
) ;

我建议让java.time 自动本地化为您而不是硬编码一种格式。若要本地化,请指定:

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

定义格式化程序:

代码语言:javascript
复制
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( 
    FormatStyle.LONG , 
    Locale.CANADA_FRENCH 
) ;

可能收集成一个List

代码语言:javascript
复制
int initialCapacity = ym.lengthOfMonth() ;
List< String > outputs = new ArrayList<>( initialCapacity ) ;

在白天循环。

代码语言:javascript
复制
for( int i = 1 , i <= ym.lengthOfMonth() ; i ++ ) {
    LocalDate ld = ym.atDay( i ) ;
    String output = ld.format( f ) ;
    outputs.add( output ) ;
}

若要将它们按星期数分组,请使用DayOfWeek枚举。

代码语言:javascript
复制
DayOfWeek dow = ld.getDayOfWeek() ;
if ( dow.equals( DayOfWeek.WEDNESDAY ) ) { … }

关于java.time

http://docs.oracle.com/javase/10/docs/api/java/time/package-summary.html框架内置到Java8和更高版本中。这些类取代了麻烦的旧遗赠日期时间类,如java.util.DateCalendarSimpleDateFormat

http://www.joda.org/joda-time/项目现在在维护模式中,建议迁移到java.time类。

要了解更多信息,请参见http://docs.oracle.com/javase/tutorial/datetime/TOC.html。并搜索堆栈溢出以获得许多示例和解释。规范是JSR 310

您可以直接与数据库交换java.time对象。使用与JDBC 4.2或更高版本兼容的JDBC 4.2。不需要字符串,也不需要java.sql.*类。

在哪里获得java.time类?

  • Java 8Java 9Java 10,以及后来的
    • 内置的。
    • 带有捆绑实现的标准Java的一部分。
    • Java 9添加了一些次要的特性和修复。

  • Java 6Java 7
    • java.time的大部分功能都是在http://www.threeten.org/threetenbp/中移植到Java6&7中的。

  • 安卓
    • 较晚版本的Android实现的java.time类。
    • 对于早期的Android (<26),https://github.com/JakeWharton/ThreeTenABP项目采用了http://www.threeten.org/threetenbp/ (上面提到的)。见http://stackoverflow.com/q/38922754/642706

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47553493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档