用JAVA构造一个日期类,包含年,月,日的属性和以下构造函数。

用JAVA构造一个日期类,包含年,月,日的属性和以下构造函数。,第1张

package test

import java.text.SimpleDateFormat

import java.util.Calendar

import java.util.Date

import java.util.GregorianCalendar

public class DateTest {

private int year

private int month

private int day

public DateTest() {

}

public DateTest(int year, int month, int day) {

this.year = year

this.month = month

this.day = day

}

// strDate 格式为"yyyy-MM-dd"

public DateTest(String strDate) throws Exception {

this.year = strDate.indexOf(0, 3)

this.month = strDate.indexOf(5, 6)

this.day = strDate.indexOf(8, 9)

}

public int dayOfYear(String strDate) throws Exception {

String pattern = "yyyy-MM-dd"

Date date = new SimpleDateFormat(pattern).parse(strDate)

Calendar cal = new GregorianCalendar()

cal.setTime(date)

return cal.get(Calendar.DAY_OF_YEAR)

}

public int getYear() {

return year

}

public void setYear(int year) {

this.year = year

}

public int getMonth() {

return month

}

public void setMonth(int month) {

this.month = month

}

public int getDay() {

return day

}

public void setDay(int day) {

this.day = day

}

public static void main(String[] args) throws Exception {

DateTest test = new DateTest()

System.out.println(test.dayOfYear("2008-12-23"))

}

}

// 设计一个日期类.要求:

// 重载带参数构造函数(int year ,int month, int day)和默认构造函数,前者要求不合要求的数据(年月日超出范围)抛出异常

// 计算出该日是星期几,(网上找公式)。

// 重载“+” *** 作,一个日期对象和天数相加(符合交换律)。

// 重载“-” *** 作,两天日期对象相减返回相差天数。

// 重载“+=” *** 作当前日期加天数

// 重载输入输出 *** 作。

#include

using namespace std

typedef unsigned int UINT

#define CPP_Get(returnType,para,funName) returnType \

get##funName(){ \

return para}

class Date

{

public:

//Constructors and Destructors

Date():year(1970),month(1),day(1){}

Date(UINT y,UINT m,UINT d)//:year(y),month(m),day(d){}

~Date()

//Methods

UINT getWeekday()

void printD()

Date operator +(UINT d)

Date operator -(UINT d)

friend ostream&operator<<(ostream &os,Date &date)//重载输出

friend ostream&operator<<(ostream &os,Date &date)//重载输入

bool isLeapYear()

bool isLeapYear(UINT y)//判断是否闰年

UINT getDays()//距离1970.1.1 星期四

void cnvDays2Date(UINT days)//将填数转换成日期

CPP_Get(UINT,year,Year)

CPP_Get(UINT,month,Month)

CPP_Get(UINT,day,Day)

private:

void set(UINT y,UINT m,UINT d)

UINT year

UINT month

UINT day

typedef enum

{

Sunday = 0,

Monday,

Tuesday,

Wednsday,

Thursday,

Friday,

Saturday

}Weekday

}

Date::Date(UINT y,UINT m,UINT d)

{

set(y,m,d)

}

void Date::printD()

{

cout<<year<<endl

cout<<month<<endl

cout<<day<<endl

}

Date::~Date()

{

}

// 公式中的符号含义如下,

// w:星期;

// c:世纪-1;

// y:年(两位数);

// m:月(m大于等于3,小于等于14,

// 即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,

// 比如2003年1月1日要看作2002年的13月1日来计算);

// d:日;[ ]代表取整,即只要整数部分。

// (C是世纪数减一,y是年份后两位,M是月份,d是日数。

// 1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。)

// 蔡勒(Zeller)公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

// =49+[49/4]+[20/4]-2×20+[26× (10+1)/10]+1-1

// =49+[12.25]+5-40+[28.6]

// =49+12+5-40+28

// =54 (除以7余5)

UINT Date::getWeekday()

{

/*

int c,y,m,d,w

//y

y = year%100

//c

c = year/100

//m

switch(month)

{

case 1:

case 2:

m = month+12

break

default:

m = month

break

}

//d

d = day

//w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1

w = y + (int)y/4 + (int)c/4 - 2*c + (int)26*(m+1)/10 +d - 1

w %=7

return w*/

int w = 4,ds

ds = getDays()

ds %=7

w = ds +w

return w%7

}

Date Date::operator+(UINT d)

{

UINT days = getDays()

days +=d

cnvDays2Date(days)

return Date(year,month,day)

}

Date Date::operator-(UINT d)

{

UINT days = getDays()

days -=d

cnvDays2Date(days)

return Date(year,month,day)

}

ostream &operator<<(ostream &os,Date &date)

{

os<<date.getYear()<<" "<<date.getMonth()<<" "<<date.getDay()<<endl

return os

}

bool Date::isLeapYear()

{

return isLeapYear(year)

}

bool Date::isLeapYear(UINT y)

{

if((y%4==0&&y%100!=0)||y%400==0)//闰年 366

return true

return false

}

UINT Date::getDays()

{

UINT y,m,d,days = 0,i

y = year - 1970

for(i = 1i <= y i++)

{

if (isLeapYear(1970+i-1))

{

days += 366

}

else

{

days +=365

}

}

//平年

//1 2 3 4 5 6 7 8 9 10 11 12

//31 28 31 30 31 30 31 31 30 31 30 31

//31 59 90 120 151 181 212 243 273 305 334 365

int iArr[12] = {0 ,31 ,59 ,90 ,120 ,151 ,181 ,212 ,243 ,273 ,305 ,334 /*,365*/}

days += iArr[month-1]

if (month>2/*||(month==2&&day==29)*/)//是否闰年多一天

{

bool b = isLeapYear(year)

days +=(UINT)b

}

d = day - 1

days +=d

return days

}

void Date::cnvDays2Date(UINT days)

{

UINT i = 0,y = 1970 ,m = 1,d = 1

//count year

do

{

if (isLeapYear(y))

{

if (days>=366)

{

days -= 366

y++

}

else

break

}

else

{

if(days>=365)

{

days -=365

y++

}

else

break

}

} while (true)

//count month

bool b = isLeapYear(y)

//平年

//1 2 3 4 5 6 7 8 9 10 11 12

//31 28 31 30 31 30 31 31 30 31 30 31

//31 59 90 120 151 181 212 243 273 305 334 365

days -=(UINT)b

int iArr[12] = {0 ,31 ,59 ,90 ,120 ,151 ,181 ,212 ,243 ,273 ,305 ,334 /*,365*/}

i = 0

while(days>=iArr[i])

{

i++

}

m = i

//count day

days -= iArr[i-1]

d = days+1

//如果是闰年,将3月1号变为2月29号

if (m==3&&d==1&&b)

{

m = 2

d = 29

}

//如果是闰年,日期前移一天

else if(m>=3&&d>1&&b)

{

d -=1

}

set(y,m,d)

}

void Date::set(UINT y,UINT m,UINT d)

{

if (m12||d>31)

{

exit(1)

}

if (y<1970)

exit(1)

if((!isLeapYear(y))&&m==2&&d==29)

exit(1)

if (d==31&&(m==4||m== 6||m== 9||m == 11))

{

exit(1)

}

year = y

month = m

day = d

}

int main()

{

//1970.1.1 星期四 ---- 2013.6.13 星期四

Date date(2013,6,13)

//date = date + 15869

date.printD()

cout<<date.getWeekday()<<endl

cout<<date.getDays()<<endl

return 0

}

1、打开UG后处理构造器,在ProcessNavigator窗口中选择要添加加工总时间的加工程序。

2、在ProcessParameters窗口中,找到并点击“CreateUserDefinedParameter”按钮,创建一个自定义参数。

3、在d出的“NewParameter”对话框中,输入参数名称为“TotalProcessingTime”,并选择类型为“Real”(即浮点数类型)。

4、点击“OK”按钮创建参数后,将该参数拖动到加工程序中,放置在需要添加加工总时间的位置即可。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11837736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存