C# 创建带有BC日期的勾号系统
我的代码目前通过在每个勾号后添加1到日期,您可以看到,这将根据月份等在必要时添加一个月/年。这比任何东西都更直观,因为所有游戏逻辑都将使用total days系统 然而,正如您所看到的,有许多不同的问题,即所有月份都是30天,与简单的DateTime方法相比,这是大量的代码。但是我的游戏设置在公元前1000年,所以我不能使用日期时间格式。我怎样才能避开这个问题C# 创建带有BC日期的勾号系统,c#,unity3d,C#,Unity3d,我的代码目前通过在每个勾号后添加1到日期,您可以看到,这将根据月份等在必要时添加一个月/年。这比任何东西都更直观,因为所有游戏逻辑都将使用total days系统 然而,正如您所看到的,有许多不同的问题,即所有月份都是30天,与简单的DateTime方法相比,这是大量的代码。但是我的游戏设置在公元前1000年,所以我不能使用日期时间格式。我怎样才能避开这个问题 public Text timeText; public byte day = 1; public byte month = 1; p
public Text timeText;
public byte day = 1;
public byte month = 1;
public short year = 1000;
public int totalYears = 1;
public int totalMonths = 1;
public int totalDays = 1;
[Range(0.1f, 5f)]
public float timeSpeed = 1f;
private float elapsedTime = 0;
public bool play = true;
private string[] monthNames = new string[13]
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December",
"January"
};
private void Update()
{
elapsedTime += Time.deltaTime;
if (elapsedTime >= timeSpeed)
{
elapsedTime = 0f;
AddDay();
Debug.Log(day + ", " + monthNames[(int)month] + ", " + year.ToString() + " BC");
}
}
private void AddDay()
{
totalDays += 1;
day += 1;
if (day == 31)
{
day = 1;
AddMonth();
}
}
private void AddMonth()
{
totalMonths += 1;
month += 1;
if (month == 13)
{
month = 1;
AddYear();
}
}
private void AddYear()
{
year -= 1;
totalYears += 1;
}
public void updateTimeText()
{
timeText.text = monthNames[(int)month] + ", " + year.ToString() + " BC";
}
编辑:我可能希望使用以下工具设计自己的日历:
public class GameCalendar : MonoBehaviour
{
public List<Month> months = new List<Month>();
public void Awake()
{
AddMonth(1, "January", 31);
AddMonth(2, "February", 28);
AddMonth(3, "March", 31);
AddMonth(4, "April", 30);
AddMonth(5, "May", 31);
AddMonth(6, "June", 30);
AddMonth(7, "July", 31);
AddMonth(8, "August", 31);
AddMonth(9, "September", 30);
AddMonth(10, "October", 31);
AddMonth(11, "November", 30);
AddMonth(12, "December", 31);
}
public void AddMonth(byte _monthInt, string _monthName, byte _daysInMonth)
{
Month m = new Month();
m.monthInt = _monthInt;
m.monthName = _monthName;
m.daysInMonth = _daysInMonth;
months.Add(m);
}
}
[System.Serializable]
public class Month
{
public byte monthInt;
public string monthName;
public byte daysInMonth;
}
公共类游戏日历:单一行为
{
公共列表月份=新列表();
公共图书馆
{
每月(1,“1月”,31日);
每月(2日,“2月”,28日);
每月(3日,“3月”,31日);
每月(4月,“4月”,30日);
每月(5月5日,5月31日);
每月(6月6日,6月30日);
每月(7日,“7月”,31日);
每月(8日,“8月”,31日);
每月(9日,“9月”,30日);
每月(10月10日、10月31日);
每月(11日,“11月”,30日);
每月(12日,“12月”,31日);
}
public void AddMonth(byte\u monthhint,string\u monthName,byte\u daysInMonth)
{
月份m=新月份();
m、 monthInt=_monthInt;
m、 蒙特纳姆=_蒙特纳姆;
m、 daysInMonth=_daysInMonth;
月份。加上(m);
}
}
[系统可序列化]
公课月
{
公共字节提示;
公共字符串名称;
公共字节日/月;
}
使用支持历史日期和不同日历的工具。我不清楚。请注意,公元前1000年也不存在一月、二月等。你是想创造一个新的世界吗?谢谢你的时间,如果我不清楚,我道歉。我要问的问题类似于日期/时间变量如何通过保存int值来工作,方法可以调用int值将其转换为字符串dd/mm/yyyy。我怎样才能获得类似的结果,而不是每增加一天、一个月、一年。我如何引用totalDays的int值并将其转换为dd/mm/yyyy,同时考虑它所在的月份,以便所有月份都不初始化为30天。因此,上面讨论的一个用例是,当ingame事件发生时,event类将存储currentday的int和dateOfEvent。然后,在UI中,与调用TimeDate.ToString()方法类似,我可以对dateOfEvent变量执行相同的操作听起来您应该创建自己的date类。@BugFinder我认为应该是这样的。我现在正在做这件事,只是希望有一个更简单的工作。谢谢你们两位抽出时间。