我正在尝试从ToDate
将具有上一个日期的日期开始,FromDate
将具有当月的第一个日期。对于1月份,它将是1/1/2013
,依此类推。如何正确获取当月的第一个日期?我无法做到。
today.add(Calendar.DAY_OF_MONTH, -1);
java.util.Date previousDay=today.getTime();
ToDate = sdfFile1.format(newjava.sql.Date(previousDay.getTime()));
today.add(Calendar.DATE, 1);
java.util.Date nextDay=today.getTime();
FromDate = sdfFile1.format(new java.sql.Date(nextDay.getTime()));
答案 0 :(得分:71)
尝试
Calendar c = Calendar.getInstance(); // this takes current date
c.set(Calendar.DAY_OF_MONTH, 1);
System.out.println(c.getTime()); // this returns java.util.Date
更新了(Since Java 8):
import java.time.LocalDate;
LocalDate todaydate = LocalDate.now();
System.out.println("Months first date in yyyy-mm-dd: " +todaydate.withDayOfMonth(1));
答案 1 :(得分:16)
如何正确获取当月的第一个日期?
LocalDate.now()
.with( TemporalAdjusters.firstDayOfMonth() )
或者...
YearMonth.now().atDay( 1 )
或者...
LocalDate.now().with ( ChronoField.DAY_OF_MONTH , 1 )
Java 8及更高版本中的java.time框架取代了旧的java.util.Date/.Calendar类。旧的课程被证明是麻烦,混乱和有缺陷的。避免它们。
java.time框架的灵感来自高度成功的Joda-Time库,由JSR 310定义,由ThreeTen-Extra项目扩展,并在Tutorial中进行了解释。
LocalDate
对于仅限日期的值,不使用时间,请使用LocalDate
类。虽然LocalDate
没有指定时区,但我们必须指定一个时区才能确定日期,例如“今天”。例如,巴黎的新日早些时候比蒙特利尔早。
时区对于确定今天的日期至关重要。对于任何给定的时刻,日期因地区而异。省略时区意味着JVM的当前时区会自动应用于确定当前日期。 JVM中的任何代码都可以在运行时更改默认值,因此您可以在移动的沙子上行走。最好明确指定所需/预期的时区,而不是隐含地依赖当前默认值。
以continent/region
的格式指定proper time zone name,例如America/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。
ZoneId zoneId = ZoneId.of ( "America/Montreal" );
LocalDate today = LocalDate.now ( zoneId );
LocalDate firstOfCurrentMonth = today.with ( ChronoField.DAY_OF_MONTH , 1 );
转储到控制台。
System.out.println ( "For zoneId: " + zoneId + " today is: " + today + " and first of this month is " + firstOfCurrentMonth );
对于zoneId:今天的美国/蒙特利尔是:2015-11-08,本月的第一个是2015-11-01
或者,使用TemporalAdjuster
。出于您的目的,您可以在TemporalAdjusters
课程中找到方便的实施(请注意复数s
),特别是firstDayOfMonth
。
LocalDate firstOfCurrentMonth = today.with( TemporalAdjusters.firstDayOfMonth() ) ;
ZonedDateTime
如果您需要一天中的某个时段,请记住,由于夏令时(DST)以及其他可能的异常,00:00:00.000
因此,让java.time确定当天第一时刻的正确时间。
ZonedDateTime zdt = firstOfCurrentMonth.atStartOfDay ( zoneId );
2015-11-01T00:00-04:00 [美国/蒙特利尔]
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。
答案 2 :(得分:7)
Calendar date = Calendar.getInstance();
date.set(Calendar.DAY_OF_MONTH, 1);
答案 3 :(得分:2)
Joda时间
如果我正确理解了这个问题,可以使用joda time
轻松完成LocalDate fromDate = new LocalDate().withDayOfMonth(1);
LocalDate toDate = new LocalDate().minusDays(1);
答案 4 :(得分:1)
答案 5 :(得分:1)
public static String getCurrentMonthFirstDate(){
Calendar c = Calendar.getInstance();
c.set(Calendar.DAY_OF_MONTH, 1);
DateFormat df = new SimpleDateFormat("MM-dd-yyyy");
//System.out.println(df.format(c.getTime()));
return df.format(c.getTime());
}
答案 6 :(得分:1)
您可以使用 java8 中的withDayOfMonth(int dayOfMonth)
方法返回每月的第一天:
LocalDate firstDay = LocalDate.now().withDayOfMonth(1);
System.out.println(firstDay); // 2019-09-01
答案 7 :(得分:1)
import java.util.Date;
import java.text.SimpleDateFormat;
...
Date currentMonth = new Date();
String yyyyMM = new SimpleDateFormat("yyyyMM").format(currentMonth);
Date firstDateOfMonth = new SimpleDateFormat("yyyyMM").parse(yyyyMM);
...
我的愚蠢解决方案。但这对我有用:D
答案 8 :(得分:0)
为了获取日期(以后可以在JPA中使用),我做了
Date startOfMonth = Date.from(LocalDate.now().withDayOfMonth(1).atStartOfDay().toInstant(ZoneOffset.UTC));
答案 9 :(得分:0)
在 Java 8 中你可以使用:
import 'package:baybay_app/Quiz/QuizHome.dart';
import 'package:flutter/material.dart';
class ResultPage extends StatefulWidget {
int mark;
ResultPage({Key key, @required this.mark}) : super(key: key);
@override
_ResultPageState createState() => _ResultPageState(mark);
}
class _ResultPageState extends State<ResultPage> {
List<String> images = [
'assets/excellent.jpg',
'assets/good.png',
'assets/Sorry.png'
];
String message;
String image;
@override
void initState(){
if(mark<5){
image = images[2];
message = 'Try Again..\n' + 'You scored $mark';
}
else if(mark==5){
image = images[1];
message = 'Good.. \n' + 'You scored $mark';
}
else{
image = images[0];
message = 'Excellent!!!...\n' + 'You scored $mark';
}
}
int mark;
_ResultPageState(this.mark);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
"Result"
)
),
body: Column(
children:[
Expanded(
flex: 6,
child: Material(
elevation: 5.0,
child: Container(
child:Column(
children: [
Material(
child: Container(
width: 300.0,
height: 300.0,
child: ClipRect(
child: Image(
image: AssetImage(
image,
)
)
),
),
),
Center(
child: Text(
message,
style: TextStyle(
fontSize: 20.0,
fontFamily: 'Staatliches'
),
),
)
],
),
),
),
),
Expanded(
flex:4,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children:<Widget>[
OutlineButton(
onPressed: () {
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (context)=> QuizHome(mark:mark)));
},
child: Text(
'Continue',
style: TextStyle(
fontSize: 20.0,
fontFamily: 'Staatliches'
)
),
padding: EdgeInsets.symmetric(vertical: 10.0,horizontal: 15.0),
borderSide: BorderSide(width: 3.0,color: Colors.brown[700])
)
],
)
)
]
)
);
}
}
答案 10 :(得分:0)
某个日期的月份的第一天:
public static Date firstDayOfMonth(Date d) {
Calendar calendar = new GregorianCalendar();
calendar.setTime(d);
calendar.set(Calendar.DAY_OF_MONTH, 1);
return calendar.getTime();
}