#c# #datetime #timespan #buttonclick
#c# #дата и время #промежуток времени #кнопка
Вопрос:
ПРОБЛЕМА: создайте программу, состоящую из кнопки ввода часов, кнопки выключения часов и метки для хранения общего отработанного времени.
Этот код кажется, что он должен быть простым, но я знаю, что чего-то не хватает. Я не могу получить дату и время clockIn с помощью кнопки inButton для использования с TimeSpan при нажатии кнопки outButton. Я довольно новичок в C #, поэтому любая критика приветствуется. Спасибо!
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace TimeClock
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public void inButton_Click(object sender, EventArgs e)
{
DateTime clockIn = DateTime.Now;
}
public void outButton_Click(object sender, EventArgs e)
{
DateTime clockOut = DateTime.Now;
TimeSpan timeWorked = clockOut - clockIn;
string timeWorkedReport = $"Time worked = {timeWorked.Hours} hours, {timeWorked.Minutes} minutes";
timeLabel.Text = timeWorkedReport;
}
}
}
Комментарии:
1. Локальная переменная против члена данных класса .. эхх
2. Можно только предположить, что
totalTimeWorked
это должно быть простоclockout-clockin
, но так ли это? Говорит ли что-нибудь об этом в назначении?3. О, и для вашего следующего вопроса: я предполагаю, что это приводит к ошибке компиляции. Если у вас есть одно или в других случаях, возможно, исключение, всегда включайте их в свой вопрос.
4. Обратите внимание, что вы должны использовать
DateTimeOffset
для этого сценария, а неDateTime
. В противном случае вы получите неверные результаты, если произойдет переход между временем ввода / вывода часов. В качестве альтернативы вы могли бы сделатьclockOut.ToUniversalTime() - clockIn.ToUniversalTime()
, или вы могли бы просто записать свое время в UTC, чтобы начать с использованияDateTime.UtcNow
.
Ответ №1:
Самое главное, что вам нужно прочитать о переменных областях и элементах данных.
Менее важно — следующее будет работать:
Я только что повысил вашу переменную до члена класса данных.
public partial class Form1 : Form
{
DateTime clockIn = DateTime.Min; // Move Here
public Form1()
{
InitializeComponent();
}
public void inButton_Click(object sender, EventArgs e)
{
clockIn = DateTime.Now;
}
public void outButton_Click(object sender, EventArgs e)
{
DateTime clockOut = DateTime.Now;
TimeSpan timeWorked = clockOut - clockIn;
string timeWorkedReport = $"Time worked = {timeWorked.Hours} hours, {timeWorked.Minutes} minutes";
timeLabel.Text = timeWorkedReport;
}
}