我正在尝试设置一个可以跟踪虚拟时间的RPG。经过一些阅读后,GregorianCalendar似乎是最好的方法,但我有一些问题,希望有经验的人可以给我一些见解。
这是我正在尝试做的事情。该游戏将于1675年开始,持续约30年。在这一点上,如果他们能够存活那么久,角色将会退休。角色将能够通过粗略的游戏从我为他们预设的动作中进行选择。有些行动会很短,需要一个小时,有些则可能需要一周或一个月。真正的问题来自于我大量使用SQLite。我想保存当前时间以及操作在数据库中的使用时间。设置它时我的第一个想法是,如果我想在1675年8月15日开始游戏以使我的数据库有3行,则将这些字段设置为8,15,1675。然后还有2个列。通过游标拉这些int并用
之类的东西设置它们GregorianCalendar time = new GregorianCalendar();
time.set(year, month, date, hour, minute);
我想我会以类似的方式拉动一个动作需要多长时间。有一个int X,然后是一个字符串来判断这个时间是以分钟,小时,天等为单位。然后将此int添加到从数据库中提取的int中以直接添加到日历中。
问:如果我将它直接添加到日历中,我如何从日历中提取int值以存储在数据库中以便稍后加载(当玩家加载游戏时)?
问:如果我将它添加到存储在数据库中的int并使用这个新int设置日历,当我添加足以使int超出日历范围时会发生什么(Date设置为31,但我又添加了一天)?
答案 0 :(得分:1)
您可以使用getTimeInMillis() setTimeInMillis()从GregorianCalendar对象转换为/从UNIX时间转换。 GregorianCalendar也有一个roll()方法:
将指定的金额添加到指定的字段并包装该值 超出最大值或最小值时的字段 当前的日期。其他字段将根据需要进行调整以维持 一致的日期。
答案 1 :(得分:0)
我建议使用Joda Time代替(有些缺乏)标准的java日期和时间实用程序。它更加灵活。
它具有日期数学功能,它支持几种不同的日历(ISO8601,佛教,科普特,Ethiopic,Gregorian,GregorianJulian,伊斯兰教,朱利安),支持间隔,持续时间和周期。它内置格式化程序,可让您的输出看起来像您想要的任何内容。
如果是我,我会使用Joda并以Joda提供的原生格式存储日期(我不记得这是正确的),然后再将它拉出来并使用Joda完成所有日期数学运算,以及将其转换为您希望用于显示给用户的任何日历。
否则,在我看来你会重新发明轮子。