万年历代码:
/
@(#)AidyCalenderjava
@author
@version 100 2008/7/19
/
import javaawt;
import javaawtevent;
import javalangStringBuffer;
import javaxswing;
import javautil;
import javaxswingTimer;
import javaxswingborder;
public class AidyCalender extends JFrame implements ActionListener,ItemListener{
Date date = new Date();
private GregorianCalendar gregorianCalendar = new GregorianCalendar();
//定义中英文字符数组存储星期信息,用于转换显示
private String[] stringWeekEn = new String[] { "SUN", "MON", "TUE", "WED",
"THU", "FRI", "SAT" };
private String[] stringWeekCn = new String[] { "星期日", "星期一", "星期二", "星期三",
"星期四", "星期五", "星期六" };
//定义存储月份的信息数组,用于转换显示方示
private String[] stringMonthEn = new String[] { "Jan", "Feb", "Mar", "Apr",
"May", "Jun", "Jul", "Aug", "Sept", "Oct", "Nov", "Dec" };
private String[] stringMonthCn = {"一月","二月","三月","四月","五月","六月",
"七月","八月","九月","十月","十一月","十二月"};
private String[] sysNowTime = new String[6];//sysNowTime 用于存储系统时间的变量
private String[] sysRunTime = new String[6];
private JLabel []labelWeek = new JLabel[7];
private JLabel []labelDay = new JLabel[42];
private JLabel labelTime = new JLabel();
private JPanel panel1 = new JPanel();
private JPanel panel2 = new JPanel();
private JPanel panel3 = new JPanel();
private JComboBox combo1 = new JComboBox();
private JComboBox combo2 = new JComboBox();
private JButton buttonToday = new JButton();
private Border border = BorderFactorycreateRaisedBevelBorder();
private Border border1 = BorderFactorycreateLineBorder(Colorcyan,3);
public AidyCalender(String title) {
super(title);
for (int y = 1900; y < 2101; y++) {
combo1addItem(" " + new Integer(y)toString()+"年");
}
for (int m = 0;m<12;m++){
combo2addItem(" "+stringMonthCn[m]);
}
buttonTodaysetText("今 天");
setLayout(new FlowLayout());
add(panel1);
add(panel2);
add(panel3);
panel1setLayout(new GridLayout(1,3,10,0));
panel1add(combo1);
combo1addItemListener(this);
panel1add(combo2);
combo2addItemListener(this);
panel1add(buttonToday);
buttonTodayaddActionListener(this);
labelTimesetFont(new Font("宋体",FontPLAIN,16));
labelTimesetForeground(ColorMAGENTA);
panel1add(labelTime);
Timer time = new Timer(1000,new TimerListener());
timeaddActionListener(new TimerListener());
//timesetRepeats(true);
timestart();
//labelTimeaddAncestorListener(new TimerListener());
panel2setLayout(new GridLayout(7,7,0,10));
panel2setBackground(Colorwhite);
for(int i=0;i<7;i++){
labelWeek[i] = new JLabel();
labelWeek[i]setHorizontalAlignment(0);
if(i==0||i==6){
labelWeek[i]setBackground(Colorblue);
labelWeek[i]setForeground(ColorRED);
labelWeek[i]setFont(new Font("黑体",FontBOLD,14));
}
else{
labelWeek[i]setForeground(ColorBLACK);
labelWeek[i]setFont(new Font("新宋体",FontPLAIN,14));
}
labelWeek[i]setText(stringWeekCn[i]);
panel2add(labelWeek[i]);
}
for(int i= 0;i<42;i++){
labelDay[i] = new JLabel();
labelDay[i]setHorizontalAlignment(0);
labelDay[i]setText("");
panel2add(labelDay[i]);
}
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
Systemexit(0);
}
});
setSize(300,300);
setBounds(250, 200, 400, 360);
setVisible(true);
setResizable(false);
setDefaultCloseOperation(JFrameEXIT_ON_CLOSE);
getSysDate();
setNowDate();
}
public void actionPerformed(ActionEvent ae){
if(aegetSource()==buttonToday){
setNowDate();
}
}
public void itemStateChanged(ItemEvent aa){
setChangeDate();
}
public int turnWeek(String week){
int i;
for(i=0;i<7;i++)
if(weekequalsIgnoreCase(stringWeekEn[i]))
break;
return i;
}
public int turnMonth(String month){
/
int turnMonth(String month)
@month 系统日期中的月,诸如Jan\Feb
@return int
返回一个整数值,用于寻找stringMonthCn[]数组中对应的中文月份
/
int i;
for(i=0;i<12;i++)
if(monthequalsIgnoreCase(stringMonthEn[i]))
break;
return i;
}
/
setNowDate()
设置当前系统日期
/
public void setNowDate(){
setSysDate(getNowYear(),getNowMonth());
getSysRunDate();
setDateNull();
combo1setSelectedIndex(getShowYear() - 1900);
combo2setSelectedIndex(getShowMonth());
setDays(getMonthDays(getNowYear(),getNowMonth()),getInitWeek(sysRunTime[0]),getNowDay());
//labelTimesetText(sysNowTime[3]);
//labelTimesetHorizontalAlignment(0);
}
/Integer getShowYear()
获取组合框中应该显示的年份
/
public void setSysDate(int year,int month){
gregorianCalendarset(year,month,1);
}
public void setDateNull(){
for(int i=0;i<42;i++){
labelDay[i]setText("");
}
}
public void setChangeDate(){
setSysDate(getComboYear(),getComboMonth());
getSysRunDate();
setDateNull();
setDays(getMonthDays(getComboYear(),getComboMonth()),getInitWeek(sysRunTime[0]),-1);
}
public int getMonthDays(int year, int month) {
/
返回所选年月的天数,因为数组中的数值从0开始,所以3\5\8\10分别代表4\6\9\11几个小月
而1代表2月,经过是否为闰年判断,选择返回28或29天
其余月份为大月,返回31天
/
switch (month) {
case 3:
case 5:
case 8:
case 10:
return 30;//小月返回30天
case 1:
if (gregorianCalendarisLeapYear(year)) {
//isLeapYear(year)确定当前纪元中的指定年份是否为闰年。
return 29;
} else {
return 28;
}//闰年的二月返回29天,平年返回28天
default:
return 31;
//大月返回31天
}
}
/
int getComboYear()
获取组合框中的年份
/
public void getSysDate(){
date = gregorianCalendargetTime();
sysNowTime = (datetoString())split(" ");
}
public void getSysRunDate(){
date = gregorianCalendargetTime();
sysRunTime = (datetoString())split(" ");
}
public int getComboYear(){
return combo1getSelectedIndex()+1900;
}
/
int getComboMonth()
获取月组合框中的整数值,
/
public int getComboMonth(){
return combo2getSelectedIndex();
}
public int getInitWeek(String initWeek){
/
getWeekNow(String initWeek)
@para nowWeek 系统日期中的星期
返回当月中的1号是从星期几开始
/
int nowWeek = 0 ;
for(int i = 0;i<7;i++){
if(initWeekequalsIgnoreCase(stringWeekEn[i])){
nowWeek = i;
break;
}
}
return nowWeek;
}
public int getNowYear(){
return IntegerparseInt(sysNowTime[5]);
}
public int getNowMonth(){
int nowMonth=0;
for(int i=0;i<12;i++){
if(sysNowTime[1]equalsIgnoreCase(stringMonthEn[i]));
nowMonth=i;
break;
}
return nowMonth;
}
public int getNowDay(){
return IntegerparseInt(sysNowTime[2]);
}
public Integer getShowYear(){
return IntegerparseInt(sysNowTime[5]);
}
public Integer getShowMonth(){
/
Integer getShowMonth()
获取在组给框中显示的中文格式月份:如七月\八月等
/
return turnMonth(sysNowTime[1]);
}
public void setDays(int monthDays,int initWeek,int day){
/
void setDays(int monthDays,int initWeek,int day)
@para monthDays 本月天数
@para initWeek 初始星期
@para day 今天日
设置月历
/
setDateNull();
for(int i=initWeek;i<initWeek+monthDays+1;i++){
if((i-initWeek+1)==day){
labelDay[i]setBorder(border1);
labelDay[i]setForeground(ColorBLUE);
labelDay[i]setFont(new Font("黑体",FontBOLD,20));
}else if((i%7==0)||(i%7==6))
labelDay[i]setForeground(ColorRED);
else{
labelDay[i]setForeground(ColorBLACK);
}
labelDay[i]setText(StringvalueOf(i-initWeek+1));
}
for(int i=initWeek+monthDays;i<42;i++)
labelDay[i]setText("");
}
class TimerListener implements ActionListener{
//AdapterDemo var=new AdapterDemo("万年历程序--Aidy");
public void actionPerformed(ActionEvent e) {
GregorianCalendar g = new GregorianCalendar();
String clock = new String((ggetTime()toString()split(" "))[3]);
labelTimesetText(clock);
}
}
public static void main(String args[])
{
try{
UIManagersetLookAndFeel(UIManagergetSystemLookAndFeelClassName());
}catch(Exception e){
throw new RuntimeException(e);
}
AidyCalender var=new AidyCalender("万年历程序--Aidy");
}
}
记事本代码这里已经贴不上了。你百度HI我,我给你。
我觉得楼主可能是这个意思
import javaxswingSwingUtilities;
import javaxswingJOptionPane;
import javaxswingUIManager;
import javaxswingUnsupportedLookAndFeelException;
public class CalenderPrinter {
public static void main(String args[]){
try {
UIManagersetLookAndFeel(UIManagergetSystemLookAndFeelClassName());
} catch (Exception e) {
eprintStackTrace();
}
SwingUtilitiesinvokeLater(new Runnable(){
public void run(){
int month=1;
int firstDay=0;
boolean leapMonth=false;
while(true){
try{
month=IntegerparseInt(JOptionPaneshowInputDialog("请输入月份(1-12)"));
break;
}catch(NumberFormatException e){
JOptionPaneshowMessageDialog(null, "您输入的月份错误,请重新输入!");
}
}
while(true){
try{
firstDay=IntegerparseInt(JOptionPaneshowInputDialog("请输入第一天星期几(0-6)"));
break;
}catch(NumberFormatException e){
JOptionPaneshowMessageDialog(null, "您输入的第一天星期几错误,请重新输入!");
}
}
if(month==2)
while(true){
leapMonth=JOptionPaneshowConfirmDialog(null, "是否设为闰月?")==JOptionPaneOK_OPTIONtrue:false;
break;
}
JOptionPaneshowMessageDialog(null, new Month(month,firstDay,leapMonth)toString());
}
});
}
}
class Month{
private int month;
private int firstDay;
private boolean leapMonth=false;
public Month(){
thismonth=1;
thisfirstDay=1;
}
public Month(int month, int firstDay){
thismonth=month;
thisfirstDay=firstDay;
}
public Month(int month, int firstDay, boolean leapMonth){
thismonth=month;
thisfirstDay=firstDay;
thisleapMonth=leapMonth;
}
public String toString(){
String monthStrings[]={"Janurary","Feburary","March","April","May","June","July","August","September","October","November","December"};
String monthName=null;
if(month>=1&&month<=12){
monthName=monthStrings[month-1];
}else{
monthName="invalid month name";
}
int monthDays;
switch(month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12: monthDays=31;break;
case 4:
case 6:
case 9:
case 11: monthDays=30;break;
case 2:
if(leapMonth){
monthDays=29;
}else{
monthDays=28;
}
break;
default: monthDays=0;break;
}
StringBuffer calenderString=new StringBuffer("Sun Mon Tue Wed Thu Fri Sat\n");
if(firstDay>=0&&firstDay<=6&&month>=1&&month<=12){
for(int i=0;i<firstDay;i++){
calenderStringappend(Stringformat("%-4s", ""));
}
for(int i=1;i<=monthDays;i++){
calenderStringappend(Stringformat("%-4d", new Integer(i)));
if((firstDay+i)%7==0){
calenderStringappend("\n");
}
}
}else{
calenderString=null;
}
return monthName+"\n"+calenderString;
}
}
calendar 当前时间加一天怎么做? java, java中的calendar如何在当前时间加一天?
方法如下:
Date date = new Date();设定当前日期
calendaradd(CalendarsetTime(date);/日历物件
calendar;当前时间
Calendar calendar = CalendargetInstance();/DAY_OF_MONTH, 1);天数加一
Java是一种可以撰写跨平台应用程式的面向物件的程式设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、资料中心、游戏控制台、科学超级计算机、行动电话和网际网路,同时拥有全球最大的开发者专业社群。
与传统程式不同,Sun 公司在推出 Java 之际就将其作为一种开放的技术。全球数以万计的 Java 开发公司被要求所设计的 Java 软体必须相互相容。“Java 语言靠群体的力量而非公司的力量”是 Sun 公司的口号之一,并获得了广大软体开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。
Sun 公司对 Java 程式语言的解释是:Java 程式语言是个简单、面向物件、分散式、解释性、健壮、安全与系统无关、可移植、高效能、多执行绪和动态的语言。
Java 平台是基于 Java 语言的平台。这样的平台目前非常流行,因此微软公司推出了与之竞争的NET平台以及模仿 Java 的 C#语言。
java怎么获得当前时间多一天
java在当前系统时间加一天主要是使用calendar类的add方法,如下程式码:
import javautilCalendar;
import javautilDate;
public class ceshi {
public static void main(String[] args) {
Date date = new Date(); 新建此时的的系统时间
Systemoutprintln(getNextDay(date)); 返回明天的时间
}
public static Date getNextDay(Date date) {
Calendar calendar = CalendargetInstance();
calendarsetTime(date);
calendaradd(CalendarDAY_OF_MONTH, +1);+1今天的时间加一天
date = calendargetTime();
return date;
}
}
php怎么将当前时间戳增加一year$now_date = time(); 获得当前时间戳
$year = date("Y",$date); 得到当前 year
$o_date = date("-m-d G:i:s",$date); 除了year 外的日期字串
$result = strtotime(($year+1)$o_date); year + 1 然后以字串连结的形式和$o_date结合成日期字串,再strtotime转化时间戳
----------------------------------------------
上述是考虑到闰year会多1天。
如果不需要考虑闰year 。
可以直接加上1year(平year)的秒数~
也就是360024365
----------------------------------------------
year 居然是 “不适合” 词汇
WHY??
echo strtotime("+1 year"); 返回的是时间戳, 如果要转换成一般时间格式还需要下面的函式
echo date('Y-m-d H:i:s', strtotime("+1 year"));
==================================================================
同理,不仅仅可以+year 还可以是天, 月日都可以的,如下程式码:
<php
echo strtotime("now"), "\n";
echo strtotime("10 September 2000"), "\n";
echo strtotime("+1 day"), "\n";
echo strtotime("+1 week"), "\n";
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n";
echo strtotime("next Thursday"), "\n";
echo strtotime("last Monday"), "\n";
>
Java取当前时间tomcat时间跟系统时间不一致的问题解决方法 摘自 -- 黑夜的部落格 一,在catalinabat中 配置如下: set JAVA_OPTS=%JAVA_OPTS% -Dusertimezone=GMT+08 -Xms256m -Xmx800m -Djavautilloggingmanager=apachejuliClassLoaderLogManager -Djavautilloggingconfigfile="%CATALINA_BASE%\conf\loggingproperties" -Xms256m -Xmx800m(初始化记忆体大小为256m,可以使用的最大记忆体为800m), -Dusertimezone=GMT+08 设定为北京时间 二,在eclipse中设定 在 首选项->Tomcat ->JVM Settings 项,设定JRE的版本为'jre150_06',并且新增如下几个JVM Parameters: -Xms128m -Xmx512m -Dfileencoding=UTF8 -Dusertimezone=GMT+08
java中怎么获取当前时间的前一天public static Date getNextDay(Date date) {
Calendar calendar = CalendargetInstance();
calendarsetTime(date);
calendaradd(CalendarDAY_OF_MONTH, -1);
date = calendargetTime();
return date;
}
Java怎么系统时间减当前时间系统时间、当前时间,如果都是同时区,结果是0
~~~~~~~~
java怎么获取当前时间/
获取系统当前时间 <br>
方 法 名:getCurrentDate<br>
@param formatStr
需要格式的目标字串例:yyyy-MM-dd
@return Date 时间物件
/
publicstatic Date getCurrentDate() {
returnnew Date();
}
publicString getTodayString() {
Calendarca = CalendargetInstance();
StringcurrDate = caget(CalendarYEAR) + "-"
+(caget(CalendarMONTH) + 1) + "-"
+caget(CalendarDAY_OF_MONTH);
ineek = caget(CalendarDAY_OF_WEEK);
Stringweekday = "";
if(week == 1) {
weekday= "星期天";
}else if (week == 2) {
weekday= "星期一";
}else if (week == 3) {
weekday= "星期二";
}else if (week == 4) {
weekday= "星期三";
}else if (week == 5) {
weekday= "星期四";
}else if (week == 6) {
weekday= "星期五";
}else if (week == 7) {
weekday= "星期六";
}
returncurrDate + " " + weekday;
}
Java怎么当前时间减过去时间这前后时间可能是机器生成的,也可能是人工输入的,那么我们可以通过下面程式码来实现
DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
{
Date d1 = dfparse("2004-03-26 13:31:40");
Date d2 = dfparse("2004-01-02 11:30:24");
long diff = d1getTime() - d2getTime();这样得到的差值是微秒级别
long days = diff / (1000 60 60 24);
long hours = (diff-days(1000 60 60 24))/(1000 60 60);
long minutes = (diff-days(1000 60 60 24)-hours(1000 60 60))/(1000 60);
Systemoutprintln(""+days+"天"+hours+"小时"+minutes+"分");
}
catch (Exception e)
{
}
1用javautilCalender来实现
Calendar calendar=CalendargetInstance();
calendarsetTime(new Date());
Systemoutprintln(calendarget(CalendarDAY_OF_MONTH));//今天的日期
calendarset(CalendarDAY_OF_MONTH,calendarget(CalendarDAY_OF_MONTH)+1);//让日期加1
Systemoutprintln(calendarget(CalendarDATE));//加1之后的日期Top
===============================================================================
2用javatextSimpleDateFormat和javautilDate来实现
Date d=new Date();
SimpleDateFormat df=new SimpleDateFormat("yyyy-MM-dd");
Systemoutprintln("今天的日期:"+dfformat(d));
Systemoutprintln("两天前的日期:" + dfformat(new Date(dgetTime() - 2 24 60 60 1000)));
Systemoutprintln("三天后的日期:" + dfformat(new Date(dgetTime() + 3 24 60 60 1000)));
## 在PostgreSQL 和 Hive中生成日期序列
### Postgresql实现日期序列
在postgresql中,有 generate_series(start_date, end_date, interval)函数来生成日期序列
```
select date(day) as day
from generate_series('2020-05-22'::timestamp, current_date, '1 day'::interval) as day
```
### Hive实现指定指定开始结束日期的日期序列
在Hive中,可以借助 posexplode(list)、datediff(end_date, start_date)来实现。
首先创建一个表名为calender,字段为day,类型为date,存入一个日期数值作为开始日期,比如2014-01-01。
```
CREATE TABLE defaultcalender (day DATE);
INSERT INTO TABLE defaultcalender VALUES(to_date('2014-01-01T00:00'));
```
借助 `datediff(end_date, start_date)`、`space(int_count)`、`split(list,seperator)`、`posexplode(list) `生成n个空格,然后split成list,posexplode将行转多列,同时返回index和value。
```
select date_add(day,idx) as new_day from defaultcalender
lateral view posexplode( split( space( datediff( current_date, to_date('2014-01-01T00:00:00') ) ), ' ') ) tt as idx, v;
```
中间过程解释:
比如:
```
select datediff('2020-06-30','2020-05-1'); -- 60
select split(space(datediff('2020-06-30','2020-05-1')),' ') -- 生成60个空格,然后split成list
```
index | value
--- | ---
0 | ' '
1 | ' '
2 | ' '
|
59| ' '
#### Hive在日期序列表添加星期几
新增一列存放星期几
```
ALTER TABLE defaultcalender ADD COLUMNS(weekday STRING);
```
借助函数`datediff`,`pmod`就可以实现
datediff 是两个日期相减的函数
语法:`datediff(string enddate, string startdate)`
返回值: int
说明: 返回两个时间参数的相差天数。
pmod 是正取余函数
语法: `pmod(int a, int b),pmod(double a, double b)`
返回值: int double
说明: 返回正的a除以b的余数
选取一个日期为星期日的日期作为参照日期,这里我选取了2013-12-29
`pmod(datediff( date, '2012-01-01'), 7) `
返回值:int 0-6
0-6分别表示星期日-星期六
```
INSERT OVERWRITE TABLE defaultcalender
select date_add(day,idx) as `date`,
-- 0-6 分别代表星期日-星期六
case pmod(datediff(date_add(day,idx), to_date('2013-12-29T00:00:00')), 7)
when 0 then '星期日'
when 1 then '星期一'
when 2 then '星期二'
when 3 then '星期三'
when 4 then '星期四'
when 5 then '星期五'
when 6 then '星期六'
END as weekday
from defaultcalender
lateral view posexplode( split( space( datediff( to_date('2030-01-01T00:00:00') , to_date('2014-01-01T00:00:00') ) ), ' ') ) tt as idx, v;
```
### 补充:Hive实现缺失日期的补全
在统计一些daily的metrics的时候,通常使用group by,往往会存在某些日期没有数据从而导致最后的结果表的日期其实不是连续的齐全序列。
比如:
store_id | date | count
---- | ---- | -----
1 | 2020-04-02 | 45
2 | 2020-04-02 | 10
2 | 2020-04-03 | 10
1 | 2020-04-05 | 50
2 | 2020-04-06 | 10
1 | 2020-04-08 | 50
| |
针对这种情况,需要进行以下步骤拆解:
1 按照store_id进行聚合,找出最小、最大日期
2 此时,基于步骤1的CTE表进行基于每个store_id的最小、最大日期的日期序列补全
```
select tstore_id, date_add(tmin_date, idx) as `date`
from store_with_min_max_usage_date t
lateral view posexplode(split(space(datediff(tmax_date, tmin_date)),' ')) pe as idx, v
```
3 将步骤2的结果与之前的agg聚合结果表进行`left join`,对`NULL`用`COALESCE(v, 0)`进行缺失值替换。
import javaawt;
import javaawtevent;
import javaxswing;
import javautil;
public class CalenderTrain extends JFrame implements ActionListener {
JComboBox Month = new JComboBox(); //月份下拉列表框
JComboBox Year = new JComboBox(); //年份下拉列表框
JLabel Year_l = new JLabel("Year::"); //定义标签
JLabel Month_l = new JLabel("Month::"); //定义标签
Date now_date = new Date(); //获取今天的日期
JButton[] button_day = new JButton[49]; //定义一个数组用来存放日期
JButton button_ok = new JButton("Enter"); //现实选择日期
JButton button_today = new JButton("Today"); //显示今天按钮
int now_year = now_dategetYear() + 1900; //获取年份值
int now_month = now_dategetMonth(); //获取月份值(当前月份-1)
String year_int = null; //存放年份
int month_int; //存放月份
JPanel pane_ym = new JPanel(); //放置下拉列表框和控制按钮面板
JPanel pane_day = new JPanel(); //放置日期面板
JPanel pane_parent = new JPanel(); //放置以上两个面板
//定义方法绘制面板
public CalenderTrain() {
super("Calender!"); //设定面板得title
//---以下几行使得关闭面板时退出程序
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
addWindowListener(new WindowAdapter() {
public void windowClose(WindowEvent e) {
Systemexit(0);
}
});
//---
setResizable(false); //面板的大小不能变化
//设定年月
/年份的区间是当前年份的过去10年到当前年份的未来20年
月份正常112月
/
for (int i = now_year - 10; i <= now_year + 20; i++) {
YearaddItem(i + "");
}
for (int i = 1; i < 13; i++) {
MonthaddItem(i + "");
}
YearsetSelectedIndex(10);//设定年份下拉列表为当前年份
pane_ymadd(Year_l);//添加年份标签
pane_ymadd(Year);//添加年份下拉列表框
MonthsetSelectedIndex(now_month);//设定月份下拉列表为当前月份
pane_ymadd(Month_l);//添加月份标签
pane_ymadd(Month);//添加月份下拉列表框
pane_ymadd(button_ok);//添加确定按钮
pane_ymadd(button_today);//添加“今天”按钮
button_okaddActionListener(this);//确定按钮添加监听事件
button_todayaddActionListener(this);//“今天”按钮添加监听事件
//年月设定结束
//初始化日期按钮并绘制
pane_daysetLayout(new GridLayout(7, 7, 10, 10));
for (int i = 0; i < 49; i++) {
button_day[i] = new JButton(" ");
pane_dayadd(button_day[i]);
}
thissetDay();//调用setDay()方法
pane_parentsetLayout(new BorderLayout());//设定布局管理器
setContentPane(pane_day);
setContentPane(pane_ym);
pane_parentadd(pane_day, BorderLayoutSOUTH);
pane_parentadd(pane_ym, BorderLayoutNORTH);
setContentPane(pane_parent);
pack();
show();
}
void setDay() {
year_int = YeargetSelectedItem()toString();
month_int = MonthgetSelectedIndex();
int year_sel = IntegerparseInt(year_int) - 1900;//获得年份值
Date dt = new Date(year_sel, month_int, 1);//构造一个日期
GregorianCalendar cal = new GregorianCalendar();//创建一个Calendar实例
calsetTime(dt);
String week[] = { "Sun", "Mon", "Tue", "Wed", "Thur", "Fri", "Sat" };
int day = 0;//day中存放某个月份的天数
int day_week = 0;//用来存放某个月的第一天是星期几的数值
//--将星期添加到前7个按钮中
for (int i = 0; i < 7; i++) {
button_day[i]setText(week[i]);
}
//--
/判断是几月份,根据它来设定day的值
其中二月份要判断是否是闰年
/
if (month_int == 0
|| month_int == 2
|| month_int == 4
|| month_int == 6
|| month_int == 7
|| month_int == 9
|| month_int == 11) {
day = 31;
} else if (
month_int == 3
|| month_int == 5
|| month_int == 8
|| month_int == 10) {
day = 30;
} else {
if (calisLeapYear(year_sel)) {
day = 29;
} else {
day = 28;
}
}
day_week = 7 + dtgetDay();
int count = 1;
/绘制按钮
在这里我们首先要根据选定的月份的第一天是星期几来确定我们绘制按钮的起始位置
其中day_week就是我们要绘制的起始位置
对于那些没有数值可以显示的按钮要置空
/
for (int i = day_week; i < day_week + day; count++, i++) {
if (i % 7 == 0
|| i == 13
|| i == 20
|| i == 27
|| i == 48
|| i == 34
|| i == 41) {
button_day[i]setForeground(ColorRED);
button_day[i]setText(count + "");
} else {
button_day[i]setText(count + "");
}
}
//--对于没有日期数值显示的按钮进行置空处理
if (day_week == 0) {
for (int i = day; i < 49; i++) {
button_day[i]setText(" ");
}
} else {
//第一天前面的按钮置空
for (int i = 7; i < day_week; i++) {
button_day[i]setText(" ");
}//最后一天后面的按钮置空
for (int i = day_week + day; i < 49; i++) {
button_day[i]setText(" ");
}
}
}
public void actionPerformed(ActionEvent e) {
if (egetSource() == button_ok) {
thissetDay();//如果点击确定按钮就调用setDay()重新方法绘制按钮
} else if (egetSource() == button_today) {
new CalenderTrain();//如果点击今天按钮,得到今天的日期
}
}
public static void main(String[] args) {
CalenderTrain ct = new CalenderTrain();
}
}
int getWeekDay(int,int,int);/判断是周几/
int getMonthDays(int,int);/判断某年某月有几天/
void printMonthCalender(int,int);/输出某年某月的日历/
int isLeapYear(int);/判断是否是闰年/
main()
{
int year;
int month;
int startDay,monthDays;
printf("input the year(YYYY):");
scanf("%d",&year);
for(month=1;month<=12;month++){
startDay=getWeekDay(year,month,1); /计算出该月第一天是星期几。返回值为0~6,分别代表周日,周一~周六/
monthDays=getMonthDays(year,month); /计算出该月共有几天/
printf("\t\t\t%d-%d\n",year, month);
printMonthCalender(startDay,monthDays);
}
system("pause");
}
/输入年月日,判断是星期几。
输出:0:表示周日,1:表示周一,2:周二,。。。6:周六/
int getWeekDay(int year,int month,int day)
{
int days1;/从0001年到year-1年共有几天/
int days2; /从year年初到month-1月共有几天/
long int totalDays; /从0000年到year年month月1号共有几天/
int i;
/计算从0001年到year-1年年底共有几天:days1。能被400整除的年数为: (year-1)%400)
关键在于如何表示出能被4整除但是不能被100整除的年数。
设 0001年到year-1年年底 能被4整除的年数为x (x=(year-1)%4)
0001年到year-1年年底 能被4整除但是不能被100整除的年数为 y,
0001年到year-1年年底 能被4整除也能被100整除的年数为 z(z=(year-1)%100,因为能被100整除则肯定能被4整除)
则 y=x-z= (year-1)%4- (year-1)%100
故0001到year-1年内闰年总年数为:(year-1)%400)+(year-1)%4- (year-1)%100 /
days1= (year-1)365+(year-1)/400+(year-1)/4-(year-1)/100; ; /从0001年到year-1年的日子总数/
/计算从year年初到month-1月共有几天:days2/
days2=0;
for(i=1;i<=month-1;i++)
days2+=getMonthDays(year,i); /第二次用到该函数/
/计算总天数/
totalDays=days1+days2+day;
return (totalDays%7);/公元第一天是周一/
}
/判断指定的某年某月的天数/
int getMonthDays(int year,int month)
{
int days;
switch(month){
case 1:case 3:case 5:case 7:case 8:case 10:case 12:
days=31;break;
case 2:
if (isLeapYear(year))
days=29;/闰年/
else
days=28;
break;
case 4:case 6:case 9:case 11:
days=30;break;
}
return days;
}
/函数功能:检测是否闰年。
入参:year。要检测的年;
返回值:0:不是闰年;1:是闰年/
int isLeapYear(int year)
{
return(year%4==0 && year%100!=0 || year%400==0);
}
void printMonthCalender(int startDay,int days)
{
int i;
int count;/控制换行/
/打印表头/
printf("Sun\tMon\tTue\tWed\tThu\tFri\tSat\n");
/打印前面空格/
for(i=1;i<=startDay;i++)
printf("\t");
count= startDay;/已经打印了startDay个空格/
for(i=1;i<=days;i++){
printf("%d\t",i);
count++;
if(count%7==0)
printf("\n");
}
printf("\n\n");
}
这种不用这么烦的,你已知年月日,直接用年月日构造一个Date或者Calender对象,然后有现成的方法获得当前日期是所属年份的第几天,是当前周的第几天,当前月的第几天
比如Calender对象属性
DAY_OF_YEAR
public static final int DAY_OF_YEAR
get 和 set 的字段数字,指示当前年中的天数。一年中第一天的值为 1。
直接就能拿到你要的结果了
你根本不用去考虑闰年这些情况,Calender类早就帮你处理好了
以上就是关于java 急全部的内容,包括:java 急、java编程问题、calendar 当前时间加一天怎么做 java等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)