Установить / получить SystemTime в Java / C #

1

У меня есть этот код в java, который посвящен SystemTime:

  private static  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss");

 //Gets the time of the boardtime object in milliseconds 
  public long getMs() {
          return super.getTimeInMillis();
  }
 //Sets the time of the boardtime object in milliseconds
  public void setMs(long ms) {
      super.setTimeInMillis(ms);
  }

Я попытался преобразовать его в С#: для первой части я использовал класс DateTimeFormatInfo:

private static DateTimeFormatInfo sdf = new DateTimeFormatInfo();

для получения системного времени в миллисекундах я использовал TimeSpan:

 long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;

Я не знаю, правильно или нет, что я делал до сих пор, но я не могу найти эквивалент С# для setTime.

Это то, что я сделал до сих пор:

  private static DateTimeFormatInfo sdf = new DateTimeFormatInfo();

   public long getMs(){
     long milliseconds = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond;
       return milliseconds;
   }

   public void setMs(long ms){  

   }

заранее спасибо

  • 2
    Вы пытаетесь установить системное время? Удачи, это намного сложнее, чем кажется (или должно быть) в моем опыте. Пожалуйста, скажите мне, что вы просто пытаетесь установить свойство DateTime объектов.
  • 0
    :) пожалуйста, не давайте мне отрицательной энергии
Показать ещё 10 комментариев
Теги:

4 ответа

0

Вы пробовали код в этой статье? http://msdn.microsoft.com/en-us/library/ms172517(v=vs.90).aspx

Он использует платформу invoke для доступа к функциям Seredll GetSystemTime и SetSystemTime.

0

Ваш getMs(), как определено выше, возвращает число MS с 01.01.00 (см. Здесь). На этой странице MSDN, чтобы установить системное время с С#, вам нужно построить структуру SYSTEMTIME, инициализировать ее правильно и передать ее функции SetSystemTime(). На странице представлен простой пример, показывающий, как это сделать. Как мы построим правильную структуру SYSTEMTIME? Можно использовать функцию FileTimeToSystemTime(), которая принимает количество тиков с 1/1/1601 (обратите внимание на другой год) и преобразует ее в SYSTEMTIME.

Итак, одним словом:

  1. В вашей функции setMs() преобразуйте переданный параметр (отметки с 01.01.10001) до отметки с 1/1/1601 (в основном, вычитайте 1600 лет в тиках)
  2. Построить структуру FILETIME из этого значения
  3. Вызовите FileTimeToSystemTime(), чтобы получить соответствующий SYSTEMTIME
  4. Вызовите SetSystemTime() и передайте это значение

Если будет более простой способ, мне было бы интересно узнать. Надеюсь это поможет!

0

Если вы просто хотите установить/получить время с миллисекунд, вы можете сделать это с помощью С# TimeSpan:

private TimeSpan time

public void setMs(long ms)
{
    this.time = TimeSpan.FromMilliseconds(ms);
}

public long getMs()
{
    return this.time.TotalMilliseconds;
}
0

Если вы хотите выделить время в миллисекундах, используйте метод TimeSpan.TotalMilliseconds, построенный из объекта DateTime используя TimeSpan.FromTicks. Создайте объект DateTime и манипулируйте меткой времени, используя миллисекунды, затем используйте предопределенный метод DateTime.AddMilliseconds, добавив соответственно. вычитание миллисекунд:

var now = DateTime.Now; // or new DateTime(2014, 05, 29, 21, 27, 05); 
Console.WriteLine(now.ToString("yyyy-MM-dd HH.mm.ss"));
var future = now.AddMilliseconds(1234567);
var past = now.AddMilliseconds(-1234567);
Console.WriteLine(future.ToString("yyyy-MM-dd HH.mm.ss"));
Console.WriteLine(past.ToString("yyyy-MM-dd HH.mm.ss"));
// get milliseconds from current date time object using TimeSpan.TotalMilliseconds
var ts = TimeSpan.FromTicks(now.Ticks);
Console.WriteLine(ts.TotalMilliseconds);

Выход:

2014-05-29 21.27.05
2014-05-29 21.47.40
2014-05-29 21.06.31
63536995625703,1

Взгляните на эту статью MSDN о пользовательских строках форматирования даты и времени для более настраиваемых параметров форматирования даты и времени для объекта DateTime.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню