我写了一个java程序,它将返回日期,月份和年份 (datatype int)
import java.util.*;
class DateTime {
int day,month,year;
GregorianCalendar date = new GregorianCalendar();
public DateTime () {
public int TimeT() {
day = date.get(Calendar.DAY_OF_MONTH);
month = date.get(Calendar.MONTH);
year = date.get(Calendar.YEAR);
// return day;
}
}
我真的很困惑如何返回日,月和年。 我必须退货,所以我可以多次使用它。
答案 0 :(得分:3)
定义一个类型来封装三个属性,并将方法返回类型更改为该类,如下所示:
public class YearMonthDay {
private final year;
private final month;
private final day;
public int getYear() {return year;}
public int getMonth() {return month;}
public int getDay() {return day;}
public YearMonthDay(int y, int m, int d) {
year = y;
month = m;
day = d;
}
// Consider overriding toString, and optionally hashCode and equals
}
现在,您可以更改班级以返回YearMonthDay
:
public YearMonthDay TimeT(){
return new YearMonthDay(
date.get(Calendar.YEAR)
, date.get(Calendar.MONTH)
, date.get(Calendar.DAY_OF_MONTH)
);
}
调用者现在可以获取YearMonthDay
一次,然后从多个位置访问其属性。
答案 1 :(得分:1)
为每个
创建不同的方法public int getDay(Date date){
return date.get(Calendar.DAY_OF_MONTH);
}
public int getMonth(Date date){
return date.get(Calendar.MONTH);
}
public int getYear(Date date){
return date.get(Calendar.YEAR);
}
答案 2 :(得分:1)
从三个字段中创建一个类并返回此类型的对象。
答案 3 :(得分:1)
Java实际上无法使用方法返回多个值。但是,您可以让您的方法返回包含必要信息的字符串,然后解析字符串。或者,使用所有必需属性创建一个具有所有必需属性的月日对象,然后返回该对象。
答案 4 :(得分:1)
使用HashMap
:
public HashMap<String, Integer> TimeT() {
HashMap<String, Integer> dateMap = new HashMap<String, Integer>();
dateMap.put("day",date.get(Calendar.DAY_OF_MONTH));
dateMap.put("month",date.get(Calendar.MONTH));
dateMap.put("year",date.get(Calendar.YEAR));
return dateMap;
}
答案 5 :(得分:1)
ISO 8601
如果要将日期信息作为文本返回,请使用{8}库或Java 8中的新java.time包,使用{{定义的格式将日期时间值转换为字符串。 3}}。
这两个库默认使用ISO 8601格式。例如2014-07-13T18:02:49+05:30
:
String output = DateTime.now().toString(); // YYYY-MM-DDTHH:MM:SS.SSS+-00:00:00 format.
但最好指定一个所需的时区,而不是隐式依赖JVM的默认时区。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
String output = DateTime.now( timeZone ).toString();
如果您只想要年,月和日,那么请使用备用格式化程序而不是默认格式化程序。以下代码生成类似2014-07-13
的字符串。
DateTimeZone timeZone = DateTimeZone.forID( "America/Montreal" );
DateTime now = DateTime.now( timeZone );
DateTimeFormatter formatter = ISODateTimeFormat.date(); // YYYY-MM-DD formatter.
String output = formatter.print( now );
DateTime
对象如果不是字符串,而是希望将数值传递给另一个对象,那么只需传递Joda-Time DateTime
对象即可。接收对象可以调用DateTime上的方法,例如getYear
,getMonthOfYear
和getDayOfMonth
。作为奖励,接收对象将拥有其他信息,例如时区。
其他答案对于一般情况是正确的:创建一个类或使用Collection来传递多个值,因为Java只能返回一个方法中的单个项。但是在日期时间值的特定情况下,当我们已经拥有这样的类时,发明一个类似乎很愚蠢。
java.Util.Date
和.Calendar
java.util.Date和.Calendar类非常麻烦。避免他们。使用Joda-Time作为替代品非常普遍。 Java 8中的新java.time包是另一个替代品,受到了Joda-Time的启发。
Joda-Time和java.time都提供LocalDate
类来表示仅限日期而没有时间和没有时区。您可能想要使用此课程。通常,如果跨时区进行任何比较,日期时间会更好,因为一天的开始和结束都是由时区定义的。
答案 6 :(得分:1)
我想我可能会看到你想说的话。 'Braj'在他提供的代码中有正确的想法。但是,我不确定这是否完全满足您的需求。我不确定你是想分别返回每个值(日,月,年),还是一起使用一种方法?我会尽力而为。
下面我将向您展示DateTime的代码:
import java.util.GregorianCalendar;
class DateTime {
private int day, month, year;
GregorianCalendar date = new GregorianCalendar();
public DateTime() {
day = date.get(GregorianCalendar.DAY_OF_MONTH);
month = date.get(GregorianCalendar.MONTH) + 1;
year = date.get(GregorianCalendar.YEAR);
}
public DateTime(int day, int month, int year){
this.day = day;
this.month = month;
this.year = year;
}
// Accessors ///
public int getDay(){
return day;
}
public int getMonth(){
return month;
}
public int getYear(){
return year;
}
// Mutators ///
public int setDay(){
return day;
}
public int setMonth(){
return month;
}
public int setYear(){
return year;
}
// String ///
public String toString(){
return getMonth() + "/" + getDay() + "/" + getYear();
}
}
现在解释一下。
我开始使用日期,月份和年份private
并保持默认构造函数几乎相同,除了一件事。
我在这个月加了1,因为1月到12月的月份被索引为0 - 11而不是1 - 12.这意味着你的月份不会遵循传统方式。我从来不知道诸如java GregorianCalendar
库中存在的import
之类的内容,所以当我测试代码时,我最初感到困惑了几秒钟。
继续前进我做了一个额外的构造函数,以防你因任何原因想输入自己的日期。如果您不打算单独的DateTime
个对象来保存随机日期,那么这完全没必要。
之后我制作了几个访问者 - getDay()
,getMonth()
,getYear()
- 以防您需要抓住日期的具体方面。
为了完成它,我制作了一个toString()方法,以常规格式打印出DateTime
个月String
日{/ 1}}。
如果您不想更改日期的各个方面(例如日期,月份或年份),我建议您删除“Mutators”。如果您不想访问日期的各个方面,那么我建议您删除“访问者”。
现在,如果出于某种原因,您希望能够编辑和访问CLIENT中的日期组件,那么您不应该创建day
,month
和{{1 }} year
,而是private
。
这是DateTime类的代码,允许您更改CLIENT中的值。 (我不推荐这个。我建议你习惯于制作访问器和变换器。)我决定称之为public
:
DateTime2
我将第二个构造函数留在那里,以防你仍然想要制作具有不同日期的单独import java.util.GregorianCalendar;
class DateTime2 {
public int day, month, year;
GregorianCalendar date = new GregorianCalendar();
public DateTime2() {
day = date.get(GregorianCalendar.DAY_OF_MONTH);
month = date.get(GregorianCalendar.MONTH) + 1;
year = date.get(GregorianCalendar.YEAR);
}
public DateTime2(int day, int month, int year){
this.day = day;
this.month = month;
this.year = year;
}
public String toString(){
return month + "/" + day + "/" + year;
}
}
个对象......
这里如果客户端代码测试两个类,然后输出:
客户端:
DateTime2
输出:
public class DateTime_CLIENT{
public static void main(){
DateTime dt = new DateTime();
System.out.println("- DateTime -");
System.out.println("Date: " + dt);
System.out.println("Month: " + dt.getMonth());
System.out.println("Day: " + dt.getDay());
System.out.println("Year: " + dt.getYear() + "\n");
DateTime2 dt2 = new DateTime2();
System.out.println("- DateTime2 -");
System.out.println("Date: " + dt2);
System.out.println("Month: " + dt2.month);
System.out.println("Day: " + dt2.day);
System.out.println("Year: " + dt2.year + "\n");
dt2.day = 400000;
System.out.println("- DateTime2 - CHANGE FROM CLIENT");
System.out.println("Date: " + dt2);
System.out.println("Month: " + dt2.month);
System.out.println("Day: " + dt2.day);
System.out.print("Year: " + dt2.year);
}
}
希望这有帮助! ; d
答案 7 :(得分:0)
最好的情况是使用成员年,月和日创建一个类,在方法中初始化为返回。
如果只使用 int ,则可以将数据与位操作合并。
year | (month << 16) | (day << 24)
不知道它是否有效。
阅读将是:
year = date & 0xffff;
month = (date >> 16) & 0xff;
day = (date >> 24) & 0xff;
这在母语中更为常见。
答案 8 :(得分:0)
它类似于Calendar类已经拥有了OP所需的一切。无需将返回的值放入散列映射或数组或其他任何内容。在OP代码中,没有return语句,但他希望能够重用代码。下面是一个简单的方法,演示了Calendar类为我们提供的内容。任何返回Calendar对象的方法都会为我们提供所需的一切,因为我们可以使用get
提取所需的值。
public static void main(String[] args) {
int day,month,year;
GregorianCalendar date = new GregorianCalendar();
day = date.get(Calendar.DAY_OF_MONTH);
month = date.get(Calendar.MONTH);
year = date.get(Calendar.YEAR);
System.out.println("Day:" + day);
System.out.println("month:" + month);
System.out.println("year:" + year);
}
答案 9 :(得分:0)
保持简单。返回Date
对象(它包含您需要的所有内容)或与此日期对应的ISO字符串,以便稍后重建。